Class AvroSerializer

java.lang.Object
org.axonframework.serialization.avro.AvroSerializer
All Implemented Interfaces:
Serializer

public class AvroSerializer extends Object implements Serializer
Serializer providing support for Apache Avro, using Single Object Encoded binary encoding.

This serializer is intended to work for classes, representing messages specified by Avro Schema. It uses a delegate serializer to serialize all other artifacts: metadata, tokens, sagas, snapshots and other non-message artifacts. In general, it is a good idea to configure event and/or message serializer to use avro, but let your default serializer use jackson or another serializer of your choice.

The serialization/deserialization is delegated to the AvroSerializerStrategy implementations. By default, the SpecificRecordBaseSerializerStrategy is provided and configured, to support Java classes generated by Avro Maven plugin (delivered by Avro Java distribution). The AvroSerializer.Builder allows to register further strategies. At least one strategy has to be configured for this serializer to work.

Since:
4.11.0
Author:
Simon Zambrovski, Jan Galinski
  • Constructor Details

    • AvroSerializer

      protected AvroSerializer(@Nonnull AvroSerializer.Builder builder)
      Creates the serializer instance.
      Parameters:
      builder - builder containing relevant settings.
  • Method Details

    • builder

      public static AvroSerializer.Builder builder()
      Creates a builder for Avro Serializer with defaults applied.

      The RevisionResolver defaults to AnnotationRevisionResolver, the Converter defaults to ChainingConverter and the default serialization strategies are enabled, which effectively activates the SpecificRecordBaseSerializerStrategy.

      The following fields are mandatory, to create the Serializer:

      Returns:
      fluent builder instance.
    • serialize

      public <T> SerializedObject<T> serialize(Object object, @Nonnull 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.
    • deserialize

      public <S, T> T deserialize(@Nonnull 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
    • canSerializeTo

      public <T> boolean canSerializeTo(@Nonnull 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.
    • classForType

      public Class classForType(@Nonnull 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 returns an UnknownSerializedType instance which proides access to the raw underlying data.

      Specified by:
      classForType in interface Serializer
      Parameters:
      type - The type identifier of the object
      Returns:
      the Class representing the type of the serialized Object
    • 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(@Nullable 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