Package io.mats3.serial.json
Class MatsSerializerJson
- java.lang.Object
-
- io.mats3.serial.json.MatsSerializerJson
-
- All Implemented Interfaces:
io.mats3.serial.MatsSerializer<java.lang.String>
- Direct Known Subclasses:
MatsSerializer_DefaultJson
public class MatsSerializerJson extends java.lang.Object implements io.mats3.serial.MatsSerializer<java.lang.String>Implementation ofMatsSerializerthat employs Jackson JSON library for serialization and deserialization, and compress and decompress usingDeflaterandInflater. The JacksonObjectMapperis configured to only handle fields (think "data struct"), i.e. not use setters or getters; and to only include non-null fields; and upon deserialization to ignore properties from the JSON that has no field in the class to be deserialized into (both to enable the modification of DTOs on the client side by removing fields that aren't used in that client scenario, and to handle widening conversions for incoming DTOs), and to use string serialization for dates (and handle the JSR310 new dates):// Create Jackson ObjectMapper ObjectMapper mapper = new ObjectMapper(); // Do not use setters and getters, thus only fields, and ignore visibility modifiers. mapper.setVisibility(PropertyAccessor.ALL, Visibility.NONE); mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY); // Drop null fields (null fields in DTOs are dropped from serialization to JSON) mapper.setSerializationInclusion(Include.NON_NULL); // Do not fail on unknown fields (i.e. if DTO class to deserialize to lacks fields that are present in the JSON) mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // Handle the java.time classes sanely, i.e. as dates, not a bunch of integers. mapper.registerModule(new JavaTimeModule()); // .. and write dates and times as Strings, e.g. 2020-11-15 mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); // Handle JDK8 Optionals as normal fields. mapper.registerModule(new Jdk8Module());
-
-
Field Summary
Fields Modifier and Type Field Description static intDEFAULT_COMPRESSION_LEVELThe default compression level - which I chose to beDeflater.BEST_SPEED(compression level 1), since I assume that the rather small incremental reduction in size does not outweigh the pretty large increase in time, as one hopefully runs on a pretty fast network (and that the MQ backing store is fast).static java.lang.StringIDENTIFICATION
-
Constructor Summary
Constructors Modifier Constructor Description protectedMatsSerializerJson(int compressionLevel)Constructs a MatsSerializer, using the specified Compression Level - refer toDeflater's constants and levels.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description protected byte[]compress(byte[] data)static MatsSerializerJsoncreate()Constructs a MatsSerializer, using theDEFAULT_COMPRESSION_LEVEL(which isDeflater.BEST_SPEED, which is 1).static MatsSerializerJsoncreate(int compressionLevel)Constructs a MatsSerializer, using the specified Compression Level - refer toDeflater's constants and levels.io.mats3.serial.MatsTrace<java.lang.String>createNewMatsTrace(java.lang.String traceId, io.mats3.serial.MatsTrace.KeepMatsTrace keepMatsTrace, boolean nonPersistent, boolean interactive)Deprecated.io.mats3.serial.MatsTrace<java.lang.String>createNewMatsTrace(java.lang.String traceId, java.lang.String flowId, io.mats3.serial.MatsTrace.KeepMatsTrace keepMatsTrace, boolean nonPersistent, boolean interactive, long ttlMillis, boolean noAudit)protected byte[]decompress(byte[] data, int offset, int length, int bestGuessDecompressedSize)io.mats3.serial.MatsSerializer.DeserializedMatsTrace<java.lang.String>deserializeMatsTrace(byte[] matsTraceBytes, int offset, int length, java.lang.String meta)io.mats3.serial.MatsSerializer.DeserializedMatsTrace<java.lang.String>deserializeMatsTrace(byte[] matsTraceBytes, java.lang.String meta)<T> TdeserializeObject(java.lang.String serialized, java.lang.Class<T> type)booleanhandlesMeta(java.lang.String meta)<T> TnewInstance(java.lang.Class<T> clazz)io.mats3.serial.MatsSerializer.SerializedMatsTraceserializeMatsTrace(io.mats3.serial.MatsTrace<java.lang.String> matsTrace)java.lang.StringserializeObject(java.lang.Object object)
-
-
-
Field Detail
-
IDENTIFICATION
public static java.lang.String IDENTIFICATION
-
DEFAULT_COMPRESSION_LEVEL
public static int DEFAULT_COMPRESSION_LEVEL
The default compression level - which I chose to beDeflater.BEST_SPEED(compression level 1), since I assume that the rather small incremental reduction in size does not outweigh the pretty large increase in time, as one hopefully runs on a pretty fast network (and that the MQ backing store is fast).
-
-
Method Detail
-
create
public static MatsSerializerJson create()
Constructs a MatsSerializer, using theDEFAULT_COMPRESSION_LEVEL(which isDeflater.BEST_SPEED, which is 1).
-
create
public static MatsSerializerJson create(int compressionLevel)
Constructs a MatsSerializer, using the specified Compression Level - refer toDeflater's constants and levels.- Parameters:
compressionLevel- the compression level given toDeflaterto use.
-
handlesMeta
public boolean handlesMeta(java.lang.String meta)
- Specified by:
handlesMetain interfaceio.mats3.serial.MatsSerializer<java.lang.String>
-
createNewMatsTrace
@Deprecated public io.mats3.serial.MatsTrace<java.lang.String> createNewMatsTrace(java.lang.String traceId, io.mats3.serial.MatsTrace.KeepMatsTrace keepMatsTrace, boolean nonPersistent, boolean interactive)Deprecated.- Specified by:
createNewMatsTracein interfaceio.mats3.serial.MatsSerializer<java.lang.String>
-
createNewMatsTrace
public io.mats3.serial.MatsTrace<java.lang.String> createNewMatsTrace(java.lang.String traceId, java.lang.String flowId, io.mats3.serial.MatsTrace.KeepMatsTrace keepMatsTrace, boolean nonPersistent, boolean interactive, long ttlMillis, boolean noAudit)- Specified by:
createNewMatsTracein interfaceio.mats3.serial.MatsSerializer<java.lang.String>
-
serializeMatsTrace
public io.mats3.serial.MatsSerializer.SerializedMatsTrace serializeMatsTrace(io.mats3.serial.MatsTrace<java.lang.String> matsTrace)
- Specified by:
serializeMatsTracein interfaceio.mats3.serial.MatsSerializer<java.lang.String>
-
deserializeMatsTrace
public io.mats3.serial.MatsSerializer.DeserializedMatsTrace<java.lang.String> deserializeMatsTrace(byte[] matsTraceBytes, java.lang.String meta)- Specified by:
deserializeMatsTracein interfaceio.mats3.serial.MatsSerializer<java.lang.String>
-
deserializeMatsTrace
public io.mats3.serial.MatsSerializer.DeserializedMatsTrace<java.lang.String> deserializeMatsTrace(byte[] matsTraceBytes, int offset, int length, java.lang.String meta)- Specified by:
deserializeMatsTracein interfaceio.mats3.serial.MatsSerializer<java.lang.String>
-
serializeObject
public java.lang.String serializeObject(java.lang.Object object)
- Specified by:
serializeObjectin interfaceio.mats3.serial.MatsSerializer<java.lang.String>
-
deserializeObject
public <T> T deserializeObject(java.lang.String serialized, java.lang.Class<T> type)- Specified by:
deserializeObjectin interfaceio.mats3.serial.MatsSerializer<java.lang.String>
-
newInstance
public <T> T newInstance(java.lang.Class<T> clazz)
- Specified by:
newInstancein interfaceio.mats3.serial.MatsSerializer<java.lang.String>
-
compress
protected byte[] compress(byte[] data)
-
decompress
protected byte[] decompress(byte[] data, int offset, int length, int bestGuessDecompressedSize)
-
-