Class NativeMessageHeaderAccessor

java.lang.Object
org.springframework.messaging.support.MessageHeaderAccessor
org.springframework.messaging.support.NativeMessageHeaderAccessor
Direct Known Subclasses:
JmsMessageHeaderAccessor, SimpMessageHeaderAccessor

public class NativeMessageHeaderAccessor extends MessageHeaderAccessor
MessageHeaderAccessor subclass that supports storage and access of headers from an external source such as a message broker. Headers from the external source are kept separate from other headers, in a sub-map under the key NATIVE_HEADERS. This allows separating processing headers from headers that need to be sent to or received from the external source.

This class is likely to be used indirectly through a protocol-specific subclass that also provides factory methods to translate message headers to and from an external messaging source.

Since:
4.0
Author:
Rossen Stoyanchev
  • Field Details

    • NATIVE_HEADERS

      public static final String NATIVE_HEADERS
      The header name used to store native headers.
      See Also:
  • Constructor Details

    • NativeMessageHeaderAccessor

      protected NativeMessageHeaderAccessor()
      Protected constructor to create a new instance.
    • NativeMessageHeaderAccessor

      protected NativeMessageHeaderAccessor(@Nullable Map<String,List<String>> nativeHeaders)
      Protected constructor to create an instance with the given native headers.
      Parameters:
      nativeHeaders - native headers to create the message with (may be null)
    • NativeMessageHeaderAccessor

      protected NativeMessageHeaderAccessor(@Nullable Message<?> message)
      Protected constructor that copies headers from another message.
  • Method Details

    • getNativeHeaders

      @Nullable protected Map<String,List<String>> getNativeHeaders()
      Subclasses can use this method to access the "native" headers sub-map.
    • toNativeHeaderMap

      public Map<String,List<String>> toNativeHeaderMap()
      Return a copy of the native headers sub-map, or an empty map.
    • setImmutable

      public void setImmutable()
      Description copied from class: MessageHeaderAccessor
      By default, when MessageHeaderAccessor.getMessageHeaders() is called, "this" MessageHeaderAccessor instance can no longer be used to modify the underlying message headers. However if MessageHeaderAccessor.setLeaveMutable(boolean) is used, this method is necessary to indicate explicitly when the MessageHeaders instance should no longer be modified.
      Overrides:
      setImmutable in class MessageHeaderAccessor
    • copyHeaders

      public void copyHeaders(@Nullable Map<String,?> headersToCopy)
      Description copied from class: MessageHeaderAccessor
      Copy the name-value pairs from the provided Map.

      This operation will overwrite any existing values. Use MessageHeaderAccessor.copyHeadersIfAbsent(Map) to avoid overwriting values.

      Overrides:
      copyHeaders in class MessageHeaderAccessor
    • copyHeadersIfAbsent

      public void copyHeadersIfAbsent(@Nullable Map<String,?> headersToCopy)
      Description copied from class: MessageHeaderAccessor
      Copy the name-value pairs from the provided Map.

      This operation will not overwrite any existing values.

      Overrides:
      copyHeadersIfAbsent in class MessageHeaderAccessor
    • containsNativeHeader

      public boolean containsNativeHeader(String headerName)
      Whether the native header map contains the give header name.
      Parameters:
      headerName - the name of the header
    • getNativeHeader

      @Nullable public List<String> getNativeHeader(String headerName)
      Return all values for the specified native header, if present.
      Parameters:
      headerName - the name of the header
      Returns:
      the associated values, or null if none
    • getFirstNativeHeader

      @Nullable public String getFirstNativeHeader(String headerName)
      Return the first value for the specified native header, if present.
      Parameters:
      headerName - the name of the header
      Returns:
      the associated value, or null if none
    • setNativeHeader

      public void setNativeHeader(String name, @Nullable String value)
      Set the specified native header value replacing existing values.

      In order for this to work, the accessor must be mutable. See MessageHeaderAccessor for details.

    • setNativeHeaderValues

      public void setNativeHeaderValues(String name, @Nullable List<String> values)
      Variant of addNativeHeader(String, String) for all values.
      Since:
      5.2.12
    • addNativeHeader

      public void addNativeHeader(String name, @Nullable String value)
      Add the specified native header value to existing values.

      In order for this to work, the accessor must be mutable. See MessageHeaderAccessor for details.

      Parameters:
      name - the name of the header
      value - the header value to set
    • addNativeHeaders

      public void addNativeHeaders(@Nullable MultiValueMap<String,String> headers)
      Add the specified native headers to existing values.
      Parameters:
      headers - the headers to set
    • removeNativeHeader

      @Nullable public List<String> removeNativeHeader(String headerName)
      Remove the specified native header value replacing existing values.

      In order for this to work, the accessor must be mutable. See MessageHeaderAccessor for details.

      Parameters:
      headerName - the name of the header
      Returns:
      the associated values, or null if the header was not present
    • getFirstNativeHeader

      @Nullable public static String getFirstNativeHeader(String headerName, Map<String,Object> headers)
      Return the first value for the specified native header, or null if none.
      Parameters:
      headerName - the name of the header
      headers - the headers map to introspect
      Returns:
      the associated value, or null if none