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

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

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


import java.util.Optional;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectWriter;

import se.hiq.oss.spring.nats.exception.SerializeException;
import se.hiq.oss.spring.nats.message.serde.NatsMessageSerializer;
import se.hiq.oss.spring.nats.message.validation.JsonSchemaValidator;
import se.hiq.oss.spring.nats.message.validation.MessageObjectValidator;

public class NatsJacksonMessageSerializer implements NatsMessageSerializer {

    private ObjectWriter objectWriter;
    private Optional schemaValidator;
    private Optional validator = Optional.empty();

    public NatsJacksonMessageSerializer(final ObjectMapper objectMapper,
                                        final Optional schemaValidator) {
        objectWriter = objectMapper.writer();
        this.schemaValidator = schemaValidator;
    }


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

    @Override
    public byte[] toMessageData(Object object) {
        try {
            validator.filter(v -> v.shouldValidate(object.getClass())).ifPresent(v -> v.validate(object));
            byte[] data = objectWriter.writeValueAsBytes(object);
            schemaValidator.ifPresent((sv) -> sv.validate(data, object.getClass()));

            return data;
        } catch (JsonProcessingException e) {
            throw new SerializeException("Could not serialize " + object + " to JSON", e);
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy