Class DefaultDataConverter

java.lang.Object
io.temporal.common.converter.DefaultDataConverter
All Implemented Interfaces:
DataConverter

public class DefaultDataConverter extends Object
A DataConverter that delegates payload conversion to type specific PayloadConverter instances, and delegates failure conversions to a FailureConverter.
  • Field Details

    • STANDARD_PAYLOAD_CONVERTERS

      public static final PayloadConverter[] STANDARD_PAYLOAD_CONVERTERS
    • STANDARD_INSTANCE

      public static final DataConverter STANDARD_INSTANCE
      Default data converter that is used for all objects if not overridden by WorkflowClientOptions.Builder.setDataConverter(DataConverter) or GlobalDataConverter.register(DataConverter) (less preferred).

      This data converter is also always used (regardless of whether or not users have supplied their own converter) to perform serialization of values essential for functionality of Temporal SDK, Server, Temporal CLI or WebUI:

      • Local Activity, Version, MutableSideEffect Markers metadata like id, time, name
      • Search attribute values
      • Stacktrace query return value
  • Constructor Details

    • DefaultDataConverter

      public DefaultDataConverter(PayloadConverter... converters)
      Creates instance from ordered array of converters and a default failure converter. When converting an object to payload the array of converters is iterated from the beginning until one of the converters successfully converts the value.
  • Method Details

    • setDefaultDataConverter

      public static void setDefaultDataConverter(DataConverter converter)
    • newDefaultInstance

      public static DefaultDataConverter newDefaultInstance()
      Creates a new instance of DefaultDataConverter populated with the default list of payload converters and a default failure converter.
    • withPayloadConverterOverrides

      public DefaultDataConverter withPayloadConverterOverrides(PayloadConverter... overrideConverters)
      Modifies this DefaultDataConverter by overriding some of its PayloadConverters. Every payload converter from overrideConverters either replaces existing payload converter with the same encoding type, or is added to the end of payload converters list.
    • withFailureConverter

      @Nonnull public DefaultDataConverter withFailureConverter(@Nonnull FailureConverter failureConverter)
      Modifies this DefaultDataConverter by overriding its FailureConverter.

      WARNING: Most users should _never_ need to override the default failure converter. To encrypt the content of failures, see CodecDataConverter instead.

      Parameters:
      failureConverter - The failure converter to use
      Throws:
      NullPointerException - if failureConverter is null
    • toPayload

      public <T> Optional<io.temporal.api.common.v1.Payload> toPayload(T value) throws DataConverterException
      Specified by:
      toPayload in interface DataConverter
      Parameters:
      value - value to convert
      Returns:
      a Payload which is a protobuf message containing byte-array serialized representation of value. Optional here is for legacy and backward compatibility reasons. This Optional is expected to always be filled.
      Throws:
      DataConverterException - if conversion fails
    • fromPayload

      public <T> T fromPayload(io.temporal.api.common.v1.Payload payload, Class<T> valueClass, Type valueType) throws DataConverterException
      Specified by:
      fromPayload in interface DataConverter
      Throws:
      DataConverterException
    • toPayloads

      public Optional<io.temporal.api.common.v1.Payloads> toPayloads(Object... values) throws DataConverterException
      Description copied from interface: DataConverter
      Implements conversion of a list of values.
      Specified by:
      toPayloads in interface DataConverter
      Parameters:
      values - Java values to convert to String.
      Returns:
      converted value. Return empty Optional if values are empty.
      Throws:
      DataConverterException - if conversion of the value passed as parameter failed for any reason.
    • fromPayloads

      public <T> T fromPayloads(int index, Optional<io.temporal.api.common.v1.Payloads> content, Class<T> parameterType, Type genericParameterType) throws DataConverterException
      Description copied from interface: DataConverter
      Implements conversion of a single Payload from the serialized Payloads.
      Specified by:
      fromPayloads in interface DataConverter
      Parameters:
      index - index of the value in the payloads
      content - serialized value to convert to Java objects.
      parameterType - type of the value stored in the content
      genericParameterType - generic type of the value stored in the content
      Returns:
      converted Java object
      Throws:
      DataConverterException - if conversion of the data passed as parameter failed for any reason.
    • failureToException

      @Nonnull public RuntimeException failureToException(@Nonnull io.temporal.api.failure.v1.Failure failure)
      Description copied from interface: DataConverter
      Instantiate an appropriate Java Exception from a serialized Failure object. The default implementation delegates the conversion process to an instance of FailureConverter, using this data converter for payload decoding.
      Specified by:
      failureToException in interface DataConverter
      Parameters:
      failure - Failure protobuf object to deserialize into an exception
    • exceptionToFailure

      @Nonnull public io.temporal.api.failure.v1.Failure exceptionToFailure(@Nonnull Throwable throwable)
      Description copied from interface: DataConverter
      Serialize an existing Throwable object into a Failure object. The default implementation delegates the conversion process to an instance of FailureConverter, using this data converter for payload encoding.
      Specified by:
      exceptionToFailure in interface DataConverter
      Parameters:
      throwable - a Throwable object to serialize into a Failure protobuf object
    • withContext

      @Nonnull public DataConverter withContext(@Nonnull SerializationContext context)
      Description copied from interface: DataConverter
      A correct implementation of this interface should have a fully functional "contextless" implementation. Temporal SDK will call this method when a knowledge of the context exists, but DataConverter can be used directly by user code and sometimes SDK itself without any context.

      Note: this method is expected to be cheap and fast. Temporal SDK doesn't always cache the instances and may be calling this method very often. Users are responsible to make sure that this method doesn't recreate expensive objects like Jackson's ObjectMapper on every call.

      Specified by:
      withContext in interface DataConverter
      Parameters:
      context - provides information to the data converter about the abstraction the data belongs to
      Returns:
      an instance of DataConverter that may use the provided context for serialization
      See Also: