Class StompSubProtocolHandler

java.lang.Object
org.springframework.web.socket.messaging.StompSubProtocolHandler
All Implemented Interfaces:
Aware, ApplicationEventPublisherAware, SubProtocolHandler

public class StompSubProtocolHandler extends Object implements SubProtocolHandler, ApplicationEventPublisherAware
A SubProtocolHandler for STOMP that supports versions 1.0, 1.1, and 1.2 of the STOMP specification.
Since:
4.0
Author:
Rossen Stoyanchev, Andy Wilkinson
  • Field Details

    • MINIMUM_WEBSOCKET_MESSAGE_SIZE

      public static final int MINIMUM_WEBSOCKET_MESSAGE_SIZE
      This handler supports assembling large STOMP messages split into multiple WebSocket messages and STOMP clients (like stomp.js) indeed split large STOMP messages at 16K boundaries. Therefore the WebSocket server input message buffer size must allow 16K at least plus a little extra for SockJS framing.
      See Also:
    • CONNECTED_USER_HEADER

      public static final String CONNECTED_USER_HEADER
      The name of the header set on the CONNECTED frame indicating the name of the user authenticated on the WebSocket session.
      See Also:
  • Constructor Details

    • StompSubProtocolHandler

      public StompSubProtocolHandler()
  • Method Details

    • setErrorHandler

      public void setErrorHandler(StompSubProtocolErrorHandler errorHandler)
      Configure a handler for error messages sent to clients which allows customizing the error messages or preventing them from being sent.

      By default this isn't configured in which case an ERROR frame is sent with a message header reflecting the error.

      Parameters:
      errorHandler - the error handler
    • getErrorHandler

      public @Nullable StompSubProtocolErrorHandler getErrorHandler()
      Return the configured error handler.
    • setMessageSizeLimit

      public void setMessageSizeLimit(int messageSizeLimit)
      Configure the maximum size allowed for an incoming STOMP message. Since a STOMP message can be received in multiple WebSocket messages, buffering may be required and therefore it is necessary to know the maximum allowed message size.

      By default this property is set to 64K.

      Since:
      4.0.3
    • getMessageSizeLimit

      public int getMessageSizeLimit()
      Get the configured message buffer size limit in bytes.
      Since:
      4.0.3
    • setEncoder

      public void setEncoder(StompEncoder encoder)
      Configure a StompEncoder for encoding STOMP frames.
      Since:
      4.3.5
    • setDecoder

      public void setDecoder(StompDecoder decoder)
      Configure a StompDecoder for decoding STOMP frames.
      Since:
      4.3.5
    • setHeaderInitializer

      public void setHeaderInitializer(@Nullable MessageHeaderInitializer headerInitializer)
      Configure a MessageHeaderInitializer to apply to the headers of all messages created from decoded STOMP frames and other messages sent to the client inbound channel.

      By default this property is not set.

    • getHeaderInitializer

      public @Nullable MessageHeaderInitializer getHeaderInitializer()
      Return the configured header initializer.
    • setPreserveReceiveOrder

      public void setPreserveReceiveOrder(boolean preserveReceiveOrder)
      Whether client messages must be handled in the order received.

      By default messages sent to the "clientInboundChannel" may not be handled in the same order because the channel is backed by a ThreadPoolExecutor that in turn does not guarantee processing in order.

      When this flag is set to true messages within the same session will be sent to the "clientInboundChannel" one at a time to preserve the order in which they were received.

      Parameters:
      preserveReceiveOrder - whether to publish in order
      Since:
      6.1
    • isPreserveReceiveOrder

      public boolean isPreserveReceiveOrder()
      Whether the handler is configured to handle inbound messages in the order in which they were received.
      Since:
      6.1
    • getSupportedProtocols

      public List<String> getSupportedProtocols()
      Description copied from interface: SubProtocolHandler
      Return the list of sub-protocols supported by this handler (never null).
      Specified by:
      getSupportedProtocols in interface SubProtocolHandler
    • setApplicationEventPublisher

      public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher)
      Description copied from interface: ApplicationEventPublisherAware
      Set the ApplicationEventPublisher that this object runs in.

      Invoked after population of normal bean properties but before an init callback like InitializingBean's afterPropertiesSet or a custom init-method. Invoked before ApplicationContextAware's setApplicationContext.

      Specified by:
      setApplicationEventPublisher in interface ApplicationEventPublisherAware
      Parameters:
      applicationEventPublisher - event publisher to be used by this object
    • getStatsInfo

      public String getStatsInfo()
      Return a String describing internal state and counters. Effectively toString() on getStats().
    • getStats

      public StompSubProtocolHandler.Stats getStats()
      Return a structured object with internal state and counters.
      Since:
      5.2
    • handleMessageFromClient

      public void handleMessageFromClient(WebSocketSession session, WebSocketMessage<?> webSocketMessage, MessageChannel targetChannel)
      Handle incoming WebSocket messages from clients.
      Specified by:
      handleMessageFromClient in interface SubProtocolHandler
      Parameters:
      session - the client session
      webSocketMessage - the client message
      targetChannel - an output channel to send messages to
    • handleMessageToClient

      public void handleMessageToClient(WebSocketSession session, Message<?> message)
      Handle STOMP messages going back out to WebSocket clients.
      Specified by:
      handleMessageToClient in interface SubProtocolHandler
      Parameters:
      session - the client session
      message - the client message
    • toMutableAccessor

      protected StompHeaderAccessor toMutableAccessor(StompHeaderAccessor headerAccessor, Message<?> message)
    • resolveSessionId

      public @Nullable String resolveSessionId(Message<?> message)
      Description copied from interface: SubProtocolHandler
      Resolve the session id from the given message or return null.
      Specified by:
      resolveSessionId in interface SubProtocolHandler
      Parameters:
      message - the message to resolve the session id from
    • afterSessionStarted

      public void afterSessionStarted(WebSocketSession session, MessageChannel outputChannel)
      Description copied from interface: SubProtocolHandler
      Invoked after a WebSocketSession has started.
      Specified by:
      afterSessionStarted in interface SubProtocolHandler
      Parameters:
      session - the client session
      outputChannel - a channel
    • afterSessionEnded

      public void afterSessionEnded(WebSocketSession session, CloseStatus closeStatus, MessageChannel outputChannel)
      Description copied from interface: SubProtocolHandler
      Invoked after a WebSocketSession has ended.
      Specified by:
      afterSessionEnded in interface SubProtocolHandler
      Parameters:
      session - the client session
      closeStatus - the reason why the session was closed
      outputChannel - a channel
    • toString

      public String toString()
      Overrides:
      toString in class Object