org.springframework.messaging.simp.stomp

## Class StompDecoder

- java.lang.Object
- - org.springframework.messaging.simp.stomp.StompDecoder

    public class StompDecoder
    extends Object

Decodes one or more STOMP frames contained in a `ByteBuffer`.

An attempt is made to read all complete STOMP frames from the buffer, which could be zero, one, or more. If there is any left-over content, i.e. an incomplete STOMP frame, at the end the buffer is reset to point to the beginning of the partial content. The caller is then responsible for dealing with that incomplete content by buffering until there is more input available.

Since:
  4.0
Author:
  Andy Wilkinson, Rossen Stoyanchev

### Constructor Summary

Constructors
Constructor and Description
`StompDecoder()`

### Method Summary

All Methods Instance Methods Concrete Methods
`List<Message<byte[]>>` `decode(ByteBuffer byteBuffer)` Decodes one or more STOMP frames from the given `ByteBuffer` into a list of `Messages`.
`List<Message<byte[]>>` `decode(ByteBuffer byteBuffer, org.springframework.util.MultiValueMap<String,String> partialMessageHeaders)` Decodes one or more STOMP frames from the given `buffer` and returns a list of `Messages`.
`MessageHeaderInitializer` `getHeaderInitializer()` Return the configured `MessageHeaderInitializer`, if any.
`void` `setHeaderInitializer(MessageHeaderInitializer headerInitializer)` Configure a `MessageHeaderInitializer` to apply to the headers of `Messages` from decoded STOMP frames.
`protected void` `skipEol(ByteBuffer byteBuffer)` Skip one ore more EOL characters at the start of the given ByteBuffer.

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

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

### Constructor Detail

#### StompDecoder

    public StompDecoder()

### Method Detail

#### setHeaderInitializer

    public void setHeaderInitializer(@Nullable
                                     MessageHeaderInitializer headerInitializer)

Configure a `MessageHeaderInitializer` to apply to the headers of `Messages` from decoded STOMP frames.

#### getHeaderInitializer

    @Nullable
    public MessageHeaderInitializer getHeaderInitializer()

Return the configured `MessageHeaderInitializer`, if any.

#### decode

    public List<Message<byte[]>> decode(ByteBuffer byteBuffer)

Decodes one or more STOMP frames from the given `ByteBuffer` into a list of `Messages`. If the input buffer contains partial STOMP frame content, or additional content with a partial STOMP frame, the buffer is reset and `null` is returned.

Parameters:
  `byteBuffer` - the buffer to decode the STOMP frame from
Returns:
  the decoded messages, or an empty list if none
Throws:
  `StompConversionException` - raised in case of decoding issues

#### decode

    public List<Message<byte[]>> decode(ByteBuffer byteBuffer,
                                        @Nullable
                                        org.springframework.util.MultiValueMap<String,String> partialMessageHeaders)

Decodes one or more STOMP frames from the given `buffer` and returns a list of `Messages`.

If the given ByteBuffer contains only partial STOMP frame content and no complete STOMP frames, an empty list is returned, and the buffer is reset to to where it was.

If the buffer contains one ore more STOMP frames, those are returned and the buffer reset to point to the beginning of the unused partial content.

The output partialMessageHeaders map is used to store successfully parsed headers in case of partial content. The caller can then check if a "content-length" header was read, which helps to determine how much more content is needed before the next attempt to decode.

Parameters:
  `byteBuffer` - the buffer to decode the STOMP frame from
  `partialMessageHeaders` - an empty output map that will store the last successfully parsed partialMessageHeaders in case of partial message content in cases where the partial buffer ended with a partial STOMP frame
Returns:
  the decoded messages, or an empty list if none
Throws:
  `StompConversionException` - raised in case of decoding issues

#### skipEol

    protected void skipEol(ByteBuffer byteBuffer)

Skip one ore more EOL characters at the start of the given ByteBuffer. STOMP, section 2.1 says: "The NULL octet can be optionally followed by multiple EOLs."