org.springframework.messaging.support

## Class NativeMessageHeaderAccessor

- java.lang.Object
- - org.springframework.messaging.support.MessageHeaderAccessor
  - - org.springframework.messaging.support.NativeMessageHeaderAccessor

Direct Known Subclasses:
  SimpMessageHeaderAccessor

    public class NativeMessageHeaderAccessor
    extends MessageHeaderAccessor

`MessageHeaderAccessor` sub-class 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 through indirectly through a protocol specific sub-class that also provide factory methods to translate message headers to an from an external messaging source.

Since:
  4.0
Author:
  Rossen Stoyanchev

### Field Summary

Fields
`static String` `NATIVE_HEADERS` The header name used to store native headers.

### Fields inherited from class org.springframework.messaging.support.MessageHeaderAccessor

`DEFAULT_CHARSET`

### Constructor Summary

Constructors
`protected` `NativeMessageHeaderAccessor()` Protected constructor to create a new instance.
`protected` `NativeMessageHeaderAccessor(Map<String,List<String>> nativeHeaders)` Protected constructor to create an instance with the given native headers.
`protected` `NativeMessageHeaderAccessor(Message<?> message)` Protected constructor that copies headers from another message.

### Method Summary

All Methods Static Methods Instance Methods Concrete Methods
`void` `addNativeHeader(String name, String value)` Add the specified native header value to existing values.
`void` `addNativeHeaders(org.springframework.util.MultiValueMap<String,String> headers)` Add the specified native headers to existing values.
`boolean` `containsNativeHeader(String headerName)` Whether the native header map contains the give header name.
`void` `copyHeaders(Map<String,?> headersToCopy)` Copy the name-value pairs from the provided Map.
`void` `copyHeadersIfAbsent(Map<String,?> headersToCopy)` Copy the name-value pairs from the provided Map.
`String` `getFirstNativeHeader(String headerName)` Return the first value for the specified native header, if present.
`static String` `getFirstNativeHeader(String headerName, Map<String,Object> headers)` Return the first value for the specified native header, or `null` if none.
`List<String>` `getNativeHeader(String headerName)` Return all values for the specified native header, if present.
`protected Map<String,List<String>>` `getNativeHeaders()` Subclasses can use this method to access the "native" headers sub-map.
`List<String>` `removeNativeHeader(String headerName)` Remove the specified native header value replacing existing values.
`void` `setImmutable()` By default when `MessageHeaderAccessor.getMessageHeaders()` is called, `"this"` `MessageHeaderAccessor` instance can no longer be used to modify the underlying message headers.
`void` `setNativeHeader(String name, String value)` Set the specified native header value replacing existing values.
`void` `setNativeHeaderValues(String name, List<String> values)` Variant of `addNativeHeader(String, String)` for all values.
`Map<String,List<String>>` `toNativeHeaderMap()` Return a copy of the native headers sub-map, or an empty map.

### Methods inherited from class org.springframework.messaging.support.MessageHeaderAccessor

`createAccessor, getAccessor, getAccessor, getAccessor, getContentType, getDetailedLogMessage, getDetailedPayloadLogMessage, getErrorChannel, getHeader, getId, getMessageHeaders, getMutableAccessor, getReplyChannel, getShortLogMessage, getShortPayloadLogMessage, getTimestamp, isModified, isMutable, isReadableContentType, isReadOnly, removeHeader, removeHeaders, setContentType, setErrorChannel, setErrorChannelName, setHeader, setHeaderIfAbsent, setLeaveMutable, setModified, setReplyChannel, setReplyChannelName, toMap, toMessageHeaders, toString, verifyType`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Field Detail

#### NATIVE_HEADERS

    public static final String NATIVE_HEADERS

The header name used to store native headers.

See Also:
  Constant Field Values

### Constructor Detail

#### 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 Detail

#### 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
                                 org.springframework.util.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