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
ASubProtocolHandler
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 Summary
Fields Modifier and Type Field Description static 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.static 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.
Constructor Summary
Constructors Constructor Description StompSubProtocolHandler()
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description void
afterSessionEnded(WebSocketSession session, CloseStatus closeStatus, MessageChannel outputChannel)
Invoked after aWebSocketSession
has ended.void
afterSessionStarted(WebSocketSession session, MessageChannel outputChannel)
Invoked after aWebSocketSession
has started.StompSubProtocolErrorHandler
getErrorHandler()
Return the configured error handler.MessageHeaderInitializer
getHeaderInitializer()
Return the configured header initializer.int
getMessageSizeLimit()
Get the configured message buffer size limit in bytes.String
getStatsInfo()
Return a String describing internal state and counters.List<String>
getSupportedProtocols()
Return the list of sub-protocols supported by this handler (nevernull
).UserSessionRegistry
getUserSessionRegistry()
Deprecated.as of 4.2void
handleMessageFromClient(WebSocketSession session, WebSocketMessage<?> webSocketMessage, MessageChannel outputChannel)
Handle incoming WebSocket messages from clients.void
handleMessageToClient(WebSocketSession session, Message<?> message)
Handle STOMP messages going back out to WebSocket clients.String
resolveSessionId(Message<?> message)
Resolve the session id from the given message or returnnull
.protected void
sendErrorMessage(WebSocketSession session, Throwable error)
Deprecated.as of Spring 4.2, in favor ofconfiguring
aStompSubProtocolErrorHandler
void
setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher)
Set the ApplicationEventPublisher that this object runs in.void
setDecoder(StompDecoder decoder)
Configure aStompDecoder
for decoding STOMP framesvoid
setEncoder(StompEncoder encoder)
Configure aStompEncoder
for encoding STOMP framesvoid
setErrorHandler(StompSubProtocolErrorHandler errorHandler)
Configure a handler for error messages sent to clients which allows customizing the error messages or preventing them from being sent.void
setHeaderInitializer(MessageHeaderInitializer headerInitializer)
Configure aMessageHeaderInitializer
to apply to the headers of all messages created from decoded STOMP frames and other messages sent to the client inbound channel.void
setMessageSizeLimit(int messageSizeLimit)
Configure the maximum size allowed for an incoming STOMP message.void
setUserSessionRegistry(UserSessionRegistry registry)
Deprecated.as of 4.2 in favor ofDefaultSimpUserRegistry
which relies on the ApplicationContext events published by this class and is created viaWebSocketMessageBrokerConfigurationSupport.createLocalUserRegistry
protected StompHeaderAccessor
toMutableAccessor(StompHeaderAccessor headerAccessor, Message<?> message)
String
toString()
Field Detail
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:
- Constant Field Values
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:
- Constant Field Values
Constructor Detail
StompSubProtocolHandler
public StompSubProtocolHandler()
Method Detail
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 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
setUserSessionRegistry
@Deprecated public void setUserSessionRegistry(UserSessionRegistry registry)
Deprecated.as of 4.2 in favor ofDefaultSimpUserRegistry
which relies on the ApplicationContext events published by this class and is created viaWebSocketMessageBrokerConfigurationSupport.createLocalUserRegistry
Provide a registry with which to register active user session ids.- See Also:
UserDestinationMessageHandler
getUserSessionRegistry
@Deprecated public UserSessionRegistry getUserSessionRegistry()
Deprecated.as of 4.2
setEncoder
public void setEncoder(StompEncoder encoder)
Configure aStompEncoder
for encoding STOMP frames- Since:
- 4.3.5
setDecoder
public void setDecoder(StompDecoder decoder)
Configure aStompDecoder
for decoding STOMP frames- Since:
- 4.3.5
setHeaderInitializer
public void setHeaderInitializer(MessageHeaderInitializer headerInitializer)
Configure aMessageHeaderInitializer
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 MessageHeaderInitializer getHeaderInitializer()
Return the configured header initializer.
getSupportedProtocols
public List<String> getSupportedProtocols()
Description copied from interface:SubProtocolHandler
Return the list of sub-protocols supported by this handler (nevernull
).- Specified by:
getSupportedProtocols
in interfaceSubProtocolHandler
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 interfaceApplicationEventPublisherAware
- Parameters:
applicationEventPublisher
- event publisher to be used by this object
getStatsInfo
public String getStatsInfo()
Return a String describing internal state and counters.
handleMessageFromClient
public void handleMessageFromClient(WebSocketSession session, WebSocketMessage<?> webSocketMessage, MessageChannel outputChannel)
Handle incoming WebSocket messages from clients.- Specified by:
handleMessageFromClient
in interfaceSubProtocolHandler
- Parameters:
session
- the client sessionwebSocketMessage
- the client messageoutputChannel
- an output channel to send messages to
sendErrorMessage
@Deprecated protected void sendErrorMessage(WebSocketSession session, Throwable error)
Deprecated.as of Spring 4.2, in favor ofconfiguring
aStompSubProtocolErrorHandler
Invoked when noerrorHandler
is configured to send an ERROR frame to the client.
handleMessageToClient
public void handleMessageToClient(WebSocketSession session, Message<?> message)
Handle STOMP messages going back out to WebSocket clients.- Specified by:
handleMessageToClient
in interfaceSubProtocolHandler
- Parameters:
session
- the client sessionmessage
- the client message
toMutableAccessor
protected StompHeaderAccessor toMutableAccessor(StompHeaderAccessor headerAccessor, Message<?> message)
resolveSessionId
public String resolveSessionId(Message<?> message)
Description copied from interface:SubProtocolHandler
Resolve the session id from the given message or returnnull
.- Specified by:
resolveSessionId
in interfaceSubProtocolHandler
- 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 aWebSocketSession
has started.- Specified by:
afterSessionStarted
in interfaceSubProtocolHandler
- Parameters:
session
- the client sessionoutputChannel
- a channel
afterSessionEnded
public void afterSessionEnded(WebSocketSession session, CloseStatus closeStatus, MessageChannel outputChannel)
Description copied from interface:SubProtocolHandler
Invoked after aWebSocketSession
has ended.- Specified by:
afterSessionEnded
in interfaceSubProtocolHandler
- Parameters:
session
- the client sessioncloseStatus
- the reason why the session was closedoutputChannel
- a channel