public class SubProtocolWebSocketHandler extends Object implements WebSocketHandler, SubProtocolCapable, MessageHandler, SmartLifecycle
WebSocketHandler that delegates incoming WebSocket
 messages to a SubProtocolHandler along with a MessageChannel to
 which the sub-protocol handler can send messages from WebSocket clients to
 the application.
 
 Also an implementation of MessageHandler that finds the WebSocket
 session associated with the Message and passes it, along with the message,
 to the sub-protocol handler to send messages from the application back to the
 client.
| Constructor and Description | 
|---|
| SubProtocolWebSocketHandler(MessageChannel clientInboundChannel,
                           SubscribableChannel clientOutboundChannel) | 
| 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() | 
| int | getPhase()Return the phase value of this object. | 
| Map<String,SubProtocolHandler> | getProtocolHandlerMap()Return the sub-protocols keyed by protocol name. | 
| List<SubProtocolHandler> | getProtocolHandlers() | 
| int | getSendBufferSizeLimit() | 
| int | getSendTimeLimit() | 
| String | getStatsInfo()Return a String describing internal state and counters. | 
| List<String> | getSubProtocols()Return all supported protocols. | 
| void | handleMessage(Message<?> message)Handle an outbound Spring Message to a WebSocket client. | 
| void | handleMessage(WebSocketSession session,
             WebSocketMessage<?> message)Handle an inbound message from a WebSocket client. | 
| void | handleTransportError(WebSocketSession session,
                    Throwable exception)Handle an error from the underlying WebSocket message transport. | 
| boolean | isAutoStartup()Returns  trueif thisLifecyclecomponent should get
 started automatically by the container at the time that the containingApplicationContextgets refreshed. | 
| boolean | isRunning()Check whether this component is currently running. | 
| void | setDefaultProtocolHandler(SubProtocolHandler defaultProtocolHandler)Set the  SubProtocolHandlerto 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. | 
| void | setSendBufferSizeLimit(int sendBufferSizeLimit) | 
| void | setSendTimeLimit(int sendTimeLimit) | 
| void | start()Start this component. | 
| void | stop()Stop this component, typically in a synchronous fashion, such that
 the component is fully stopped upon return of this method. | 
| void | stop(Runnable callback)Indicates that a Lifecycle component must stop if it is currently running. | 
| boolean | supportsPartialMessages()Whether the WebSocketHandler handles partial messages. | 
| String | toString() | 
public SubProtocolWebSocketHandler(MessageChannel clientInboundChannel, SubscribableChannel clientOutboundChannel)
public void setProtocolHandlers(List<SubProtocolHandler> protocolHandlers)
protocolHandlers - the sub-protocol handlers to usepublic List<SubProtocolHandler> getProtocolHandlers()
public void addProtocolHandler(SubProtocolHandler handler)
public Map<String,SubProtocolHandler> getProtocolHandlerMap()
public void setDefaultProtocolHandler(SubProtocolHandler defaultProtocolHandler)
SubProtocolHandler to use when the client did not request a
 sub-protocol.defaultProtocolHandler - the default handlerpublic SubProtocolHandler getDefaultProtocolHandler()
public List<String> getSubProtocols()
getSubProtocols in interface SubProtocolCapablepublic void setSendTimeLimit(int sendTimeLimit)
public int getSendTimeLimit()
public void setSendBufferSizeLimit(int sendBufferSizeLimit)
public int getSendBufferSizeLimit()
public boolean isAutoStartup()
SmartLifecycletrue if this Lifecycle component should get
 started automatically by the container at the time that the containing
 ApplicationContext gets refreshed.
 A value of false indicates that the component is intended to
 be started through an explicit Lifecycle.start() call instead, analogous
 to a plain Lifecycle implementation.
isAutoStartup in interface SmartLifecycleLifecycle.start(), 
Phased.getPhase(), 
LifecycleProcessor.onRefresh(), 
ConfigurableApplicationContext.refresh()public int getPhase()
Phasedpublic final boolean isRunning()
LifecycleIn the case of a container, this will return true
 only if all components that apply are currently running.
public String getStatsInfo()
public final void start()
LifecycleIn the case of a container, this will propagate the start signal to all components that apply.
start in interface LifecycleSmartLifecycle.isAutoStartup()public final void stop()
LifecycleSmartLifecycle and its stop(Runnable)
 variant in cases where asynchronous stop behavior is necessary.
 Should not throw an exception if the component isn't started yet.
In the case of a container, this will propagate the stop signal to all components that apply.
stop in interface LifecycleSmartLifecycle.stop(Runnable)public final void stop(Runnable callback)
SmartLifecycleThe provided callback is used by the LifecycleProcessor to support
 an ordered, and potentially concurrent, shutdown of all components having a
 common shutdown order value. The callback must be executed after
 the SmartLifecycle component does indeed stop.
 
The LifecycleProcessor will call only this variant of the
 stop method; i.e. Lifecycle.stop() will not be called for
 SmartLifecycle implementations unless explicitly delegated to within
 the implementation of this method.
stop in interface SmartLifecycleLifecycle.stop(), 
Phased.getPhase()public void afterConnectionEstablished(WebSocketSession session) throws Exception
WebSocketHandlerafterConnectionEstablished in interface WebSocketHandlerException - 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
handleMessage in interface WebSocketHandlerException - this method can handle or propagate exceptions; see class-level
 Javadoc for details.public void handleMessage(Message<?> message) throws MessagingException
handleMessage in interface MessageHandlermessage - the message to be handledMessagingExceptionpublic void handleTransportError(WebSocketSession session, Throwable exception) throws Exception
WebSocketHandlerhandleTransportError in interface WebSocketHandlerException - this method can handle or propagate exceptions; see class-level
 Javadoc for details.public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception
WebSocketHandlerafterConnectionClosed in interface WebSocketHandlerException - this method can handle or propagate exceptions; see class-level
 Javadoc for details.public boolean supportsPartialMessages()
WebSocketHandlertrue 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