Class EmbeddedHeadersJsonMessageMapper

java.lang.Object
org.springframework.integration.support.json.EmbeddedHeadersJsonMessageMapper
All Implemented Interfaces:
BytesMessageMapper, InboundMessageMapper<byte[]>, OutboundMessageMapper<byte[]>

public class EmbeddedHeadersJsonMessageMapper extends Object implements BytesMessageMapper
For outbound messages, uses a message-aware Jackson JSON mapper to render the message as JSON. For messages with byte[] payloads, if rendered as JSON, Jackson performs Base64 conversion on the bytes. If payload is byte[] and the rawBytes property is true (default), the result has the form [headersLen][headers][payloadLen][payload]; with the headers rendered in JSON and the payload unchanged. Otherwise, the message is fully serialized and deserialized with Jackson JSON mapper.

By default, embed no headers apart from the standard MessageHeaders.ID, MessageHeaders.TIMESTAMP and MessageHeaders.CONTENT_TYPE headers; always embed those (when present) to restore them on the receiving side. Provide simple patterns to specify additional headers to embed.

If neither expected format is detected, nor an error occurs during conversion, the payload of the message is the original byte[].

IMPORTANT

The default JSON mapper will only deserialize classes in certain packages.

"java.util",
"java.lang",
"org.springframework.messaging.support",
"org.springframework.integration.support",
"org.springframework.integration.message",
"org.springframework.integration.store",
"org.springframework.integration.history",
        "org.springframework.integration.handler"

To add more packages, create an JSON mapper using JacksonMessagingUtils.messagingAwareMapper(String...).

A constructor is provided allowing the provision of such a configured JSON mapper.

Since:
7.0
Author:
Jooyoung Pyoung, Glenn Renfro
  • Field Details

    • logger

      protected final org.apache.commons.logging.Log logger
  • Constructor Details

  • Method Details

    • setRawBytes

      public void setRawBytes(boolean rawBytes)
      For messages with byte[] payloads, if rendered as JSON, Jackson performs Base64 conversion on the bytes. If this property is true (default), the result has the form [headersLen][headers][payloadLen][payload]; with the headers rendered in JSON and the payload unchanged. Set to false to render the bytes as base64.
      Parameters:
      rawBytes - false to encode as base64.
    • setCaseSensitive

      public void setCaseSensitive(boolean caseSensitive)
      Set to true to make the header name pattern match case-sensitive. Default false.
      Parameters:
      caseSensitive - true to make case-sensitive.
    • getHeaderPatterns

      public Collection<String> getHeaderPatterns()
    • fromMessage

      public byte[] fromMessage(Message<?> message)
      Specified by:
      fromMessage in interface BytesMessageMapper
      Specified by:
      fromMessage in interface OutboundMessageMapper<byte[]>
    • toMessage

      public Message<?> toMessage(byte[] bytes, @Nullable Map<String,Object> headers)
      Description copied from interface: InboundMessageMapper
      Convert a provided object to the Message and supply with headers if necessary and provided.
      Specified by:
      toMessage in interface BytesMessageMapper
      Specified by:
      toMessage in interface InboundMessageMapper<byte[]>
      Parameters:
      bytes - the object for message payload or some other conversion logic
      headers - additional headers for building message. Can be null
      Returns:
      the message as a result of mapping