All Downloads are FREE. Search and download functionalities are using the official Maven repository.

se.hiq.oss.spring.nats.message.serde.json.NatsJacksonMessageDeserializer Maven / Gradle / Ivy

There is a newer version: 0.15
Show newest version
package se.hiq.oss.spring.nats.message.serde.json;


import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Optional;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;
import io.nats.client.Message;

import se.hiq.oss.spring.nats.exception.DeserializeException;
import se.hiq.oss.spring.nats.message.serde.NatsMessageDeserializer;
import se.hiq.oss.spring.nats.message.validation.JsonSchemaValidator;
import se.hiq.oss.spring.nats.message.validation.MessageObjectValidator;

public class NatsJacksonMessageDeserializer implements NatsMessageDeserializer {

    private ObjectReader objectReader;
    private Class ofType;
    private Optional schemaValidator;
    private Optional validator = Optional.empty();


    public NatsJacksonMessageDeserializer(final ObjectMapper objectMapper,
                                          final Class ofType,
                                          final Optional schemaValidator) {
        this.objectReader = objectMapper.readerFor(ofType);
        this.ofType = ofType;
        this.schemaValidator = schemaValidator;
    }

    @Override
    public void setValidator(Optional validator) {
        this.validator = validator;
    }

    @Override
    public Object fromMessage(Message message) {
        try {
            String dataString = new String(message.getData(), StandardCharsets.UTF_8);
            schemaValidator.ifPresent((sv) -> sv.validate(message.getData(), ofType));
            Object object =  objectReader.readValue(dataString);

            validator.filter(v -> v.shouldValidate(ofType)).ifPresent((v) ->  v.validate(object));

            return object;
        } catch (IOException e) {

            throw new DeserializeException("Could not deserialize message from JSON to object", e);
        }

    }



}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy