Class WrappedMessage

java.lang.Object
org.infinispan.protostream.WrappedMessage

public final class WrappedMessage extends Object
A wrapper for messages, enums or primitive types that encodes the type of the inner object/value and also helps keep track of where the message ends. The need for this wrapper stems from two particular design choices in the Protocol Buffers encoding.

1. The Protocol Buffers encoding format does not contain any description of the message type that follows next in the data stream, unlike for example the Java serialization format which provides information about classes that are saved in a Serialization stream in the form of class descriptors which contain the fully qualified name of the class being serialized. The Protocol Buffers client is expected to know what message type he is expecting to read from the stream. This knowledge exists in most cases, statically, so this encoding scheme saves a lot of space by not including redundant type descriptors in the stream by default. For all other use cases where data types are dynamic you are on your own, but WrappedMessage is here to help you.

2. The Protocol Buffer wire format is also not self-delimiting, so when reading a message we see just a stream of fields and we are not able to determine when the fields of the current message end and the next message starts. The protocol assumes that the whole contents of the stream is to be interpreted as a single message. If that's not the case, then the user must provide his own way of delimiting messages either by using message start/stop markers or by prefixing each message with its size or any other equivalent mechanism. WrappedMessage relies on an int32 size prefix.

So wherever you cannot statically decide what message type you'll be using and need to defer this until runtime, just use WrappedMessage.

Since:
1.0
Author:
[email protected]
  • Field Details

    • PROTOBUF_TYPE_NAME

      public static final String PROTOBUF_TYPE_NAME
      The fully qualified Protobuf type name of this message. This type is defined in message-wrapping.proto.
      See Also:
    • PROTOBUF_TYPE_ID

      public static final int PROTOBUF_TYPE_ID
      The type id of WrappedMessage itself.
      See Also:
    • PROTO_FILE

      public static final String PROTO_FILE
      Full path of the message-wrapping.proto resource file in classpath.
      See Also:
    • WRAPPED_DOUBLE

      public static final int WRAPPED_DOUBLE
      A wrapped double.
      See Also:
    • WRAPPED_FLOAT

      public static final int WRAPPED_FLOAT
      A wrapped float.
      See Also:
    • WRAPPED_INT64

      public static final int WRAPPED_INT64
      A wrapped int64.
      See Also:
    • WRAPPED_UINT64

      public static final int WRAPPED_UINT64
      A wrapped uint64.
      See Also:
    • WRAPPED_INT32

      public static final int WRAPPED_INT32
      A wrapped int32.
      See Also:
    • WRAPPED_FIXED64

      public static final int WRAPPED_FIXED64
      A wrapped fixed64.
      See Also:
    • WRAPPED_FIXED32

      public static final int WRAPPED_FIXED32
      A wrapped fixed32.
      See Also:
    • WRAPPED_BOOL

      public static final int WRAPPED_BOOL
      A wrapped bool.
      See Also:
    • WRAPPED_STRING

      public static final int WRAPPED_STRING
      A wrapped string.
      See Also:
    • WRAPPED_CHAR

      public static final int WRAPPED_CHAR
      A wrapped char (marshalled as int32).
      See Also:
    • WRAPPED_SHORT

      public static final int WRAPPED_SHORT
      A wrapped short (marshalled as int32).
      See Also:
    • WRAPPED_BYTE

      public static final int WRAPPED_BYTE
      A wrapped byte (marshalled as int32).
      See Also:
    • WRAPPED_DATE_MILLIS

      public static final int WRAPPED_DATE_MILLIS
      A wrapped java.util.Date (marshalled as int64).
      See Also:
    • WRAPPED_INSTANT_SECONDS

      public static final int WRAPPED_INSTANT_SECONDS
      A wrapped java.time.Instant (marshalled as int64 (seconds) and an int32 (nanos)).
      See Also:
    • WRAPPED_INSTANT_NANOS

      public static final int WRAPPED_INSTANT_NANOS
      The nanoseconds of the java.time.Instant.
      See Also:
    • WRAPPED_BYTES

      public static final int WRAPPED_BYTES
      A wrapped bytes.
      See Also:
    • WRAPPED_UINT32

      public static final int WRAPPED_UINT32
      A wrapped uint32.
      See Also:
    • WRAPPED_SFIXED32

      public static final int WRAPPED_SFIXED32
      A wrapped sfixed32.
      See Also:
    • WRAPPED_SFIXED64

      public static final int WRAPPED_SFIXED64
      A wrapped sfixed64.
      See Also:
    • WRAPPED_SINT32

      public static final int WRAPPED_SINT32
      A wrapped sint32.
      See Also:
    • WRAPPED_SINT64

      public static final int WRAPPED_SINT64
      A wrapped sint64.
      See Also:
    • WRAPPED_TYPE_NAME

      public static final int WRAPPED_TYPE_NAME
      The name of the fully qualified message or enum type name, when the wrapped object is a message or enum.
      See Also:
    • WRAPPED_DESCRIPTOR_FULL_NAME

      @Deprecated public static final int WRAPPED_DESCRIPTOR_FULL_NAME
      Deprecated.
      Use WRAPPED_TYPE_NAME instead. This will be removed in ver. 5.
      See Also:
    • WRAPPED_MESSAGE

      public static final int WRAPPED_MESSAGE
      A byte array containing the encoded message.
      See Also:
    • WRAPPED_ENUM

      public static final int WRAPPED_ENUM
      The enum value.
      See Also:
    • WRAPPED_TYPE_ID

      public static final int WRAPPED_TYPE_ID
      The (optional) numeric type id of the wrapped message or enum. This is an alternative to WRAPPED_TYPE_NAME.
      See Also:
    • WRAPPED_DESCRIPTOR_TYPE_ID

      @Deprecated public static final int WRAPPED_DESCRIPTOR_TYPE_ID
      Deprecated.
      Use WRAPPED_TYPE_ID instead. This will be removed in ver. 5.
      See Also:
    • WRAPPED_DESCRIPTOR_ID

      @Deprecated public static final int WRAPPED_DESCRIPTOR_ID
      Deprecated.
      Use WRAPPED_TYPE_ID instead. This will be removed in ver. 5.
      See Also:
    • WRAPPED_EMPTY

      public static final int WRAPPED_EMPTY
      A flag indicating and empty/null message.
      See Also:
    • WRAPPED_CONTAINER_SIZE

      public static final int WRAPPED_CONTAINER_SIZE
      The (optional) number of repeated elements.
      See Also:
    • WRAPPED_CONTAINER_TYPE_NAME

      public static final int WRAPPED_CONTAINER_TYPE_NAME
      See Also:
    • WRAPPED_CONTAINER_TYPE_ID

      public static final int WRAPPED_CONTAINER_TYPE_ID
      See Also:
    • WRAPPED_CONTAINER_MESSAGE

      public static final int WRAPPED_CONTAINER_MESSAGE
      See Also:
    • CONTAINER_SIZE_CONTEXT_PARAM

      public static final String CONTAINER_SIZE_CONTEXT_PARAM
      See Also:
  • Constructor Details

    • WrappedMessage

      public WrappedMessage(Object value)
  • Method Details

    • getValue

      public Object getValue()
      Returns the wrapped value, which is either a primitive, an enum, or a message. The value can be null also.
    • equals

      public boolean equals(Object o)
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • toString

      public String toString()
      Overrides:
      toString in class Object