public class ProtobufDecoder extends ProtobufCodecSupport implements Decoder<com.google.protobuf.Message>
Decoder
that reads Message
s 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.
ProtobufEncoder
Modifier and Type | Field and Description |
---|---|
protected static int |
DEFAULT_MESSAGE_MAX_SIZE
The default max size for aggregating messages.
|
Constructor and Description |
---|
ProtobufDecoder()
Construct a new
ProtobufDecoder . |
ProtobufDecoder(com.google.protobuf.ExtensionRegistry extensionRegistry)
Construct a new
ProtobufDecoder with an initializer that allows the
registration of message extensions. |
Modifier and Type | Method and Description |
---|---|
boolean |
canDecode(ResolvableType elementType,
MimeType mimeType)
Whether the decoder supports the given target element type and the MIME
type of the source stream.
|
com.google.protobuf.Message |
decode(DataBuffer dataBuffer,
ResolvableType targetType,
MimeType mimeType,
Map<String,Object> hints)
Decode a data buffer to an Object of type T.
|
reactor.core.publisher.Flux<com.google.protobuf.Message> |
decode(org.reactivestreams.Publisher<DataBuffer> inputStream,
ResolvableType elementType,
MimeType mimeType,
Map<String,Object> hints)
Decode a
DataBuffer input stream into a Flux of T . |
reactor.core.publisher.Mono<com.google.protobuf.Message> |
decodeToMono(org.reactivestreams.Publisher<DataBuffer> inputStream,
ResolvableType elementType,
MimeType mimeType,
Map<String,Object> hints)
Decode a
DataBuffer input stream into a Mono of T . |
List<MimeType> |
getDecodableMimeTypes()
Return the list of MIME types supported by this Decoder.
|
int |
getMaxMessageSize()
Return the
configured message size limit. |
void |
setMaxMessageSize(int maxMessageSize)
The max size allowed per message.
|
getMimeTypes, supportsMimeType
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getDecodableMimeTypes
protected static final int DEFAULT_MESSAGE_MAX_SIZE
public ProtobufDecoder()
ProtobufDecoder
.public ProtobufDecoder(com.google.protobuf.ExtensionRegistry extensionRegistry)
ProtobufDecoder
with an initializer that allows the
registration of message extensions.extensionRegistry
- a message extension registrypublic void setMaxMessageSize(int maxMessageSize)
By default, this is set to 256K.
maxMessageSize
- the max size per message, or -1 for unlimitedpublic int getMaxMessageSize()
configured
message size limit.public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType)
Decoder
public reactor.core.publisher.Flux<com.google.protobuf.Message> decode(org.reactivestreams.Publisher<DataBuffer> inputStream, ResolvableType elementType, @Nullable MimeType mimeType, @Nullable Map<String,Object> hints)
Decoder
DataBuffer
input stream into a Flux of T
.decode
in interface Decoder<com.google.protobuf.Message>
inputStream
- the DataBuffer
input stream to decodeelementType
- the expected type of elements in the output stream;
this type must have been previously passed to the Decoder.canDecode(org.springframework.core.ResolvableType, org.springframework.util.MimeType)
method and it must have returned true
.mimeType
- the MIME type associated with the input stream (optional)hints
- additional information about how to do decodepublic reactor.core.publisher.Mono<com.google.protobuf.Message> decodeToMono(org.reactivestreams.Publisher<DataBuffer> inputStream, ResolvableType elementType, @Nullable MimeType mimeType, @Nullable Map<String,Object> hints)
Decoder
DataBuffer
input stream into a Mono of T
.decodeToMono
in interface Decoder<com.google.protobuf.Message>
inputStream
- the DataBuffer
input stream to decodeelementType
- the expected type of elements in the output stream;
this type must have been previously passed to the Decoder.canDecode(org.springframework.core.ResolvableType, org.springframework.util.MimeType)
method and it must have returned true
.mimeType
- the MIME type associated with the input stream (optional)hints
- additional information about how to do decodepublic com.google.protobuf.Message decode(DataBuffer dataBuffer, ResolvableType targetType, @Nullable MimeType mimeType, @Nullable Map<String,Object> hints) throws DecodingException
Decoder
decode
in interface Decoder<com.google.protobuf.Message>
dataBuffer
- the DataBuffer
to decodetargetType
- the expected output typemimeType
- the MIME type associated with the datahints
- additional information about how to do decodenull
DecodingException
public List<MimeType> getDecodableMimeTypes()
Decoder
canDecode(elementType, null)
. The list may also exclude MIME types
supported only for a specific element type. Alternatively, use
Decoder.getDecodableMimeTypes(ResolvableType)
for a more precise list.getDecodableMimeTypes
in interface Decoder<com.google.protobuf.Message>