Package io.axoniq.dataprotection.serialization.json

## Class JacksonSerializer

- java.lang.Object
- - io.axoniq.dataprotection.serialization.json.JacksonSerializer

- All Implemented Interfaces:
    `Serializer`

      public class JacksonSerializer
      extends Object
      implements Serializer

  Serializer implementation that uses Jackson to serialize objects into a JSON format. Although the Jackson serializer requires classes to be compatible with this specific serializer, it providers much more compact serialization, while still being human readable.
  Since:
    2.2
  Author:
    Allard Buijze

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `JacksonSerializer()` | Initialize the serializer with a default ObjectMapper instance.
    `JacksonSerializer​(com.fasterxml.jackson.databind.ObjectMapper objectMapper)` | Initialize the serializer with the given `objectMapper` to serialize and parse the objects to JSON.
    `JacksonSerializer​(com.fasterxml.jackson.databind.ObjectMapper objectMapper, RevisionResolver revisionResolver)` | Initialize the serializer with the given `objectMapper` to serialize and parse the objects to JSON.
    `JacksonSerializer​(com.fasterxml.jackson.databind.ObjectMapper objectMapper, RevisionResolver revisionResolver, Converter converter)` | Initialize the serializer with the given `objectMapper` to serialize and parse the objects to JSON.
    `JacksonSerializer​(com.fasterxml.jackson.databind.ObjectMapper objectMapper, RevisionResolver revisionResolver, Converter converter, ClassLoader classLoader)` | Initialize the serializer with the given `objectMapper` to serialize and parse the objects to JSON.
    `JacksonSerializer​(RevisionResolver revisionResolver, Converter converter)` | Initialize the serializer using a default ObjectMapper instance, using the given `revisionResolver` to define revision for each object to serialize, and given `converter` to be used by upcasters.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `<T> boolean` | `canSerializeTo​(Class<T> expectedRepresentation)` | Indicates whether this Serializer is capable of serializing to the given `expectedRepresentation`.
    `Class` | `classForType​(SerializedType type)` | Returns the class for the given type identifier.
    `<S,​T> T` | `deserialize​(SerializedObject<S> serializedObject)` | Deserializes the first object read from the given `bytes`.
    `Converter` | `getConverter()` | Returns the `Converter` used by this Serializer to convert between serialized representations.
    `com.fasterxml.jackson.databind.ObjectMapper` | `getObjectMapper()` | Returns the ObjectMapper used by this serializer, allowing for configuration of the serialization settings.
    `protected com.fasterxml.jackson.databind.ObjectReader` | `getReader​(Class<?> type)` | Provides the ObjectReader, with which objects are read from the JSON form.
    `protected RevisionResolver` | `getRevisionResolver()` | Returns the revision resolver used by this serializer.
    `protected com.fasterxml.jackson.databind.ObjectWriter` | `getWriter()` | Provides the ObjectWriter, with which objects are serialized to JSON form.
    `protected void` | `registerConverters​(ChainingConverter converter)` | Registers converters with the given `converter` which depend on the actual contents of the serialized for to represent a JSON format.
    `protected String` | `resolveClassName​(SerializedType serializedType)` | Resolve the class name from the given `serializedType`.
    `<T> SerializedObject<T>` | `serialize​(Object object, Class<T> expectedRepresentation)` | Serialize the given `object` into a Serialized Object containing the given `expectedRepresentation`.
    `SerializedType` | `typeForClass​(Class type)` | Returns the type identifier for the given class.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### JacksonSerializer

          public JacksonSerializer()

      Initialize the serializer with a default ObjectMapper instance. Revisions are resolved using `@Revision` annotations on the serialized classes.

    - #### JacksonSerializer

          public JacksonSerializer​(com.fasterxml.jackson.databind.ObjectMapper objectMapper)

      Initialize the serializer with the given `objectMapper` to serialize and parse the objects to JSON. This objectMapper allows for customization of the serialized form.
      Parameters:
        `objectMapper` - The objectMapper to serialize objects and parse JSON with

    - #### JacksonSerializer

          public JacksonSerializer​(RevisionResolver revisionResolver,
                                   Converter converter)

      Initialize the serializer using a default ObjectMapper instance, using the given `revisionResolver` to define revision for each object to serialize, and given `converter` to be used by upcasters.
      Parameters:
        `revisionResolver` - The strategy to use to resolve the revision of an object
        `converter` - The factory providing the converter instances for upcasters

    - #### JacksonSerializer

          public JacksonSerializer​(com.fasterxml.jackson.databind.ObjectMapper objectMapper,
                                   RevisionResolver revisionResolver)

      Initialize the serializer with the given `objectMapper` to serialize and parse the objects to JSON. This objectMapper allows for customization of the serialized form. The given `revisionResolver` is used to resolve the revision from an object to be serialized.
      Parameters:
        `objectMapper` - The objectMapper to serialize objects and parse JSON with
        `revisionResolver` - The strategy to use to resolve the revision of an object

    - #### JacksonSerializer

          public JacksonSerializer​(com.fasterxml.jackson.databind.ObjectMapper objectMapper,
                                   RevisionResolver revisionResolver,
                                   Converter converter)

      Initialize the serializer with the given `objectMapper` to serialize and parse the objects to JSON. This objectMapper allows for customization of the serialized form. The given `revisionResolver` is used to resolve the revision from an object to be serialized. The given `converter` is the converter factory used by upcasters to convert between content types.
      Parameters:
        `objectMapper` - The objectMapper to serialize objects and parse JSON with
        `revisionResolver` - The strategy to use to resolve the revision of an object
        `converter` - The factory providing the converter instances for upcasters

    - #### JacksonSerializer

          public JacksonSerializer​(com.fasterxml.jackson.databind.ObjectMapper objectMapper,
                                   RevisionResolver revisionResolver,
                                   Converter converter,
                                   ClassLoader classLoader)

      Initialize the serializer with the given `objectMapper` to serialize and parse the objects to JSON. This objectMapper allows for customization of the serialized form. The given `revisionResolver` is used to resolve the revision from an object to be serialized. The given `converter` is the converter factory used by upcasters to convert between content types.
      Parameters:
        `objectMapper` - The objectMapper to serialize objects and parse JSON with
        `revisionResolver` - The strategy to use to resolve the revision of an object
        `converter` - The factory providing the converter instances for upcasters
        `classLoader` - The class loader to load classes with when deserializing

  - ### Method Detail

    - #### registerConverters

          protected void registerConverters​(ChainingConverter converter)

      Registers converters with the given `converter` which depend on the actual contents of the serialized for to represent a JSON format.
      Parameters:
        `converter` - The ChainingConverter instance to register the converters with.

    - #### serialize

          public <T> SerializedObject<T> serialize​(Object object,
                                                   Class<T> expectedRepresentation)

      Description copied from interface: `Serializer`
      Serialize the given `object` into a Serialized Object containing the given `expectedRepresentation`. Use `Serializer.canSerializeTo(Class)` to detect whether the `expectedRepresentation` is supported by this serializer.
      Specified by:
        `serialize` in interface `Serializer`
      Type Parameters:
        `T` - The expected data type representing the serialized object
      Parameters:
        `object` - The object to serialize
        `expectedRepresentation` - The expected data type representing the serialized object
      Returns:
        the instance representing the serialized object.

    - #### getObjectMapper

          public final com.fasterxml.jackson.databind.ObjectMapper getObjectMapper()

      Returns the ObjectMapper used by this serializer, allowing for configuration of the serialization settings.
      Returns:
        the ObjectMapper instance used by his serializer

    - #### getWriter

          protected com.fasterxml.jackson.databind.ObjectWriter getWriter()

      Provides the ObjectWriter, with which objects are serialized to JSON form. This method may be overridden to change the configuration of the writer to use.
      Returns:
        The writer to serialize objects with

    - #### getReader

          protected com.fasterxml.jackson.databind.ObjectReader getReader​(Class<?> type)

      Provides the ObjectReader, with which objects are read from the JSON form. This method may be overridden to change the configuration of the reader to use.
      Parameters:
        `type` - The type of object to create a reader for
      Returns:
        The writer to serialize objects with

    - #### canSerializeTo

          public <T> boolean canSerializeTo​(Class<T> expectedRepresentation)

      Description copied from interface: `Serializer`
      Indicates whether this Serializer is capable of serializing to the given `expectedRepresentation`. When `true`, this does *not* guarantee that the serialization and (optional) conversion will also succeed when executed. For example, when a serializer produces a `byte[]` containing JSON, trying to convert to a Dom4J Document will fail, even though this serializer has a converter to convert `byte[]` to Dom4J instances.
      Specified by:
        `canSerializeTo` in interface `Serializer`
      Type Parameters:
        `T` - The type of data a Serialized Object should contain
      Parameters:
        `expectedRepresentation` - The type of data a Serialized Object should contain
      Returns:
        `true` if the `expectedRepresentation` is supported, otherwise `false`.

    - #### deserialize

          public <S,​T> T deserialize​(SerializedObject<S> serializedObject)

      Description copied from interface: `Serializer`
      Deserializes the first object read from the given `bytes`. The `bytes` are not consumed from the array or modified in any way. The resulting object instance is cast to the expected type.
      Specified by:
        `deserialize` in interface `Serializer`
      Type Parameters:
        `S` - The data type of the serialized object
        `T` - The expected deserialized type
      Parameters:
        `serializedObject` - the instance describing the type of object and the bytes providing the serialized data
      Returns:
        the serialized object, cast to the expected type

    - #### classForType

          public Class classForType​(SerializedType type)
                             throws UnknownSerializedTypeException

      Description copied from interface: `Serializer`
      Returns the class for the given type identifier. The result of this method must guarantee that the deserialized SerializedObject with the given `type` is an instance of the returned Class. If a class cannot be resolved (i.e. because the class is not available on this JVM's classpath) this method throws UnknownSerializedTypeException.
      Specified by:
        `classForType` in interface `Serializer`
      Parameters:
        `type` - The type identifier of the object
      Returns:
        the Class representing the type of the serialized Object
      Throws:
        `UnknownSerializedTypeException` - if the `type` cannot be resolved to a class

    - #### resolveClassName

          protected String resolveClassName​(SerializedType serializedType)

      Resolve the class name from the given `serializedType`. This method may be overridden to customize the names used to denote certain classes, for example, by leaving out a certain base package for brevity.
      Parameters:
        `serializedType` - The serialized type to resolve the class name for
      Returns:
        The fully qualified name of the class to load

    - #### typeForClass

          public SerializedType typeForClass​(Class type)

      Description copied from interface: `Serializer`
      Returns the type identifier for the given class. This is the type identifier of the Serialized object as returned by `Serializer.serialize(Object, Class)`.
      Specified by:
        `typeForClass` in interface `Serializer`
      Parameters:
        `type` - Class representing the type of the serializable Object.
      Returns:
        The type identifier of the object

    - #### getConverter

          public Converter getConverter()

      Description copied from interface: `Serializer`
      Returns the `Converter` used by this Serializer to convert between serialized representations. Generally, this Converter depends on the type of data the serializer serializes to.
      Specified by:
        `getConverter` in interface `Serializer`
      Returns:
        the converter used by this Serializer

    - #### getRevisionResolver

          protected RevisionResolver getRevisionResolver()

      Returns the revision resolver used by this serializer.
      Returns:
        the revision resolver