Class ProtobufDecoder

  • All Implemented Interfaces:
    Decoder<com.google.protobuf.Message>

    public class ProtobufDecoder
    extends ProtobufCodecSupport
    implements Decoder<com.google.protobuf.Message>
    A Decoder that reads Messages using Google Protocol Buffers.

    Flux deserialized via decode(Publisher, ResolvableType, MimeType, Map) are expected to use delimited Protobuf messages with the size of each message specified before the message itself. Single values deserialized via decodeToMono(Publisher, ResolvableType, MimeType, Map) are expected to use regular Protobuf message format (without the size prepended before the message).

    Notice that default instance of Protobuf message produces empty byte array, so Mono.just(Msg.getDefaultInstance()) sent over the network will be deserialized as an empty Mono.

    To generate Message Java classes, you need to install the protoc binary.

    This decoder requires Protobuf 3 or higher, and supports "application/x-protobuf" and "application/octet-stream" with the official "com.google.protobuf:protobuf-java" library.

    Since:
    5.1
    Author:
    S茅bastien Deleuze
    See Also:
    ProtobufEncoder
    • Constructor Detail

      • ProtobufDecoder

        public ProtobufDecoder​(com.google.protobuf.ExtensionRegistry extensionRegistry)
        Construct a new ProtobufDecoder with an initializer that allows the registration of message extensions.
        Parameters:
        extensionRegistry - a message extension registry
    • Method Detail

      • setMaxMessageSize

        public void setMaxMessageSize​(int maxMessageSize)
        The max size allowed per message.

        By default, this is set to 256K.

        Parameters:
        maxMessageSize - the max size per message, or -1 for unlimited
      • canDecode

        public boolean canDecode​(ResolvableType elementType,
                                 @Nullable
                                 MimeType mimeType)
        Description copied from interface: Decoder
        Whether the decoder supports the given target element type and the MIME type of the source stream.
        Specified by:
        canDecode in interface Decoder<com.google.protobuf.Message>
        Parameters:
        elementType - the target element type for the output stream
        mimeType - the mime type associated with the stream to decode (can be null if not specified)
        Returns:
        true if supported, false otherwise
      • decode

        public com.google.protobuf.Message decode​(DataBuffer dataBuffer,
                                                  ResolvableType targetType,
                                                  @Nullable
                                                  MimeType mimeType,
                                                  @Nullable
                                                  Map<String,​Object> hints)
                                           throws DecodingException
        Description copied from interface: Decoder
        Decode a data buffer to an Object of type T. This is useful for scenarios, that distinct messages (or events) are decoded and handled individually, in fully aggregated form.
        Specified by:
        decode in interface Decoder<com.google.protobuf.Message>
        Parameters:
        dataBuffer - the DataBuffer to decode
        targetType - the expected output type
        mimeType - the MIME type associated with the data
        hints - additional information about how to do encode
        Returns:
        the decoded value, possibly null
        Throws:
        DecodingException