
se.hiq.oss.spring.nats.message.serde.json.NatsJacksonMessageSerializer Maven / Gradle / Ivy
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