public class SubProtocolWebSocketHandler extends Object implements WebSocketHandler, MessageHandler
WebSocketHandler
that delegates messages to a SubProtocolHandler
based on the sub-protocol value requested by the client through the
Sec-WebSocket-Protocol
request header A default handler can also be configured
to use if the client does not request a specific sub-protocol.Constructor and Description |
---|
SubProtocolWebSocketHandler(MessageChannel outputChannel) |
Modifier and Type | Method and Description |
---|---|
void |
addProtocolHandler(SubProtocolHandler handler)
Register a sub-protocol handler.
|
void |
afterConnectionClosed(WebSocketSession session,
CloseStatus closeStatus)
Invoked after the WebSocket connection has been closed by either side, or after a
transport error has occurred.
|
void |
afterConnectionEstablished(WebSocketSession session)
Invoked after WebSocket negotiation has succeeded and the WebSocket connection is
opened and ready for use.
|
protected SubProtocolHandler |
findProtocolHandler(WebSocketSession session) |
SubProtocolHandler |
getDefaultProtocolHandler() |
Map<String,SubProtocolHandler> |
getProtocolHandlers() |
Set<String> |
getSupportedProtocols()
Return all supported protocols.
|
void |
handleMessage(Message<?> message)
Handles the message if possible.
|
void |
handleMessage(WebSocketSession session,
WebSocketMessage<?> message)
Invoked when a new WebSocket message arrives.
|
void |
handleTransportError(WebSocketSession session,
Throwable exception)
Handle an error from the underlying WebSocket message transport.
|
void |
setDefaultProtocolHandler(SubProtocolHandler defaultProtocolHandler)
Set the
SubProtocolHandler to use when the client did not request a
sub-protocol. |
void |
setProtocolHandlers(List<SubProtocolHandler> protocolHandlers)
Configure one or more handlers to use depending on the sub-protocol requested by
the client in the WebSocket handshake request.
|
boolean |
supportsPartialMessages()
Whether the WebSocketHandler handles partial messages.
|
public SubProtocolWebSocketHandler(MessageChannel outputChannel)
outputChannel
- public void setProtocolHandlers(List<SubProtocolHandler> protocolHandlers)
protocolHandlers
- the sub-protocol handlers to usepublic void addProtocolHandler(SubProtocolHandler handler)
public Map<String,SubProtocolHandler> getProtocolHandlers()
public void setDefaultProtocolHandler(SubProtocolHandler defaultProtocolHandler)
SubProtocolHandler
to use when the client did not request a
sub-protocol.defaultProtocolHandler
- the default handlerpublic SubProtocolHandler getDefaultProtocolHandler()
public void afterConnectionEstablished(WebSocketSession session) throws Exception
WebSocketHandler
afterConnectionEstablished
in interface WebSocketHandler
Exception
- this method can handle or propagate exceptions; see class-level
Javadoc for details.protected final SubProtocolHandler findProtocolHandler(WebSocketSession session)
public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception
WebSocketHandler
handleMessage
in interface WebSocketHandler
Exception
- this method can handle or propagate exceptions; see class-level
Javadoc for details.public void handleMessage(Message<?> message) throws MessagingException
MessageHandler
MessageRejectedException
e.g.
in case of a Selective Consumer. When a consumer tries to handle a
message, but fails to do so, a MessageHandlingException
is
thrown. In the last case it is recommended to treat the message as tainted
and go into an error scenario.
When the handling results in a failure of another message being sent
(e.g. a "reply" message), that failure will trigger a
MessageDeliveryException
.
handleMessage
in interface MessageHandler
message
- the message to be handled
reply related to the handling of the messageMessagingException
public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception
WebSocketHandler
handleTransportError
in interface WebSocketHandler
Exception
- this method can handle or propagate exceptions; see class-level
Javadoc for details.public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception
WebSocketHandler
afterConnectionClosed
in interface WebSocketHandler
Exception
- this method can handle or propagate exceptions; see class-level
Javadoc for details.public boolean supportsPartialMessages()
WebSocketHandler
true
and the underlying WebSocket server supports partial messages,
then a large WebSocket message, or one of an unknown size may be split and
maybe received over multiple calls to
WebSocketHandler.handleMessage(WebSocketSession, WebSocketMessage)
. The flag
WebSocketMessage.isLast()
indicates if
the message is partial and whether it is the last part.supportsPartialMessages
in interface WebSocketHandler