Package io.axoniq.dataprotection.serialization

## Class JavaSerializer

- java.lang.Object
- - io.axoniq.dataprotection.serialization.JavaSerializer

- All Implemented Interfaces:
    `Serializer`

      public class JavaSerializer
      extends Object
      implements Serializer

  Serializer implementation that uses Java serialization to serialize and deserialize object instances. This implementation is very suitable if the life span of the serialized objects allows classes to remain unchanged. If Class definitions need to be changed during the object's life cycle, another implementation, like the `XStreamSerializer` might be a more suitable alternative.
  Since:
    2.0
  Author:
    Allard Buijze

- - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `JavaSerializer()` | Initialize the serializer using a SerialVersionUIDRevisionResolver, which uses the SerialVersionUID field of the serializable object as the Revision.
    `JavaSerializer​(RevisionResolver revisionResolver)` | Initialize the serializer using a SerialVersionUIDRevisionResolver.

  - ### 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.
    `<T> SerializedObject<T>` | `serialize​(Object instance, Class<T> expectedType)` | 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

    - #### JavaSerializer

          public JavaSerializer()

      Initialize the serializer using a SerialVersionUIDRevisionResolver, which uses the SerialVersionUID field of the serializable object as the Revision.

    - #### JavaSerializer

          public JavaSerializer​(RevisionResolver revisionResolver)

      Initialize the serializer using a SerialVersionUIDRevisionResolver.
      Parameters:
        `revisionResolver` - The revision resolver providing the revision numbers for a given class

  - ### Method Detail

    - #### serialize

          public <T> SerializedObject<T> serialize​(Object instance,
                                                   Class<T> expectedType)

      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:
        `instance` - The object to serialize
        `expectedType` - The expected data type representing the serialized object
      Returns:
        the instance representing the serialized object.

    - #### 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)

      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

    - #### 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