org.springframework.web.socket.sockjs.transport

## Class TransportHandlingSockJsService

- java.lang.Object
- - org.springframework.web.socket.sockjs.support.AbstractSockJsService
  - - org.springframework.web.socket.sockjs.transport.TransportHandlingSockJsService

- All Implemented Interfaces:
    Lifecycle, CorsConfigurationSource, SockJsService, SockJsServiceConfig
  Direct Known Subclasses:
    DefaultSockJsService

      public class TransportHandlingSockJsService
      extends AbstractSockJsService
      implements SockJsServiceConfig, Lifecycle

  A basic implementation of `SockJsService` with support for SPI-based transport handling and session management.

  Based on the `TransportHandler` SPI. `TransportHandlers` may additionally implement the `SockJsSessionFactory` and `HandshakeHandler` interfaces.

  See the `AbstractSockJsService` base class for important details on request mapping.

  Since:
    4.0
  Author:
    Rossen Stoyanchev, Juergen Hoeller, Sebastien Deleuze

- - ### Field Summary

    - ### Fields inherited from class org.springframework.web.socket.sockjs.support.AbstractSockJsService

      `corsConfiguration, logger`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `TransportHandlingSockJsService(TaskScheduler scheduler, Collection<TransportHandler> handlers)` Create a TransportHandlingSockJsService with given `handler` types.
    `TransportHandlingSockJsService(TaskScheduler scheduler, TransportHandler... handlers)` Create a TransportHandlingSockJsService with given `handler` types.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `List<HandshakeInterceptor>` | `getHandshakeInterceptors()` Return the configured WebSocket handshake request interceptors.
    `SockJsMessageCodec` | `getMessageCodec()` The codec to use for encoding and decoding SockJS messages.
    `Map<TransportType,TransportHandler>` | `getTransportHandlers()` Return the registered handlers per transport type.
    `protected void` | `handleRawWebSocketRequest(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler handler)` Handle request for raw WebSocket communication, i.e.
    `protected void` | `handleTransportRequest(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler handler, String sessionId, String transport)` Handle a SockJS session URL (i.e.
    `boolean` | `isRunning()` Check whether this component is currently running.
    `void` | `setHandshakeInterceptors(List<HandshakeInterceptor> interceptors)` Configure one or more WebSocket handshake request interceptors.
    `void` | `setMessageCodec(SockJsMessageCodec messageCodec)` The codec to use for encoding and decoding SockJS messages.
    `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.
    `protected boolean` | `validateRequest(String serverId, String sessionId, String transport)`

    - ### Methods inherited from class org.springframework.web.socket.sockjs.support.AbstractSockJsService

      `addCacheHeaders, addNoCacheHeaders, checkOrigin, getAllowedOriginPatterns, getAllowedOrigins, getCorsConfiguration, getDisconnectDelay, getHeartbeatTime, getHttpMessageCacheSize, getName, getSockJsClientLibraryUrl, getStreamBytesLimit, getTaskScheduler, handleRequest, isSessionCookieNeeded, isWebSocketEnabled, sendMethodNotAllowed, setAllowedOriginPatterns, setAllowedOrigins, setDisconnectDelay, setHeartbeatTime, setHttpMessageCacheSize, setName, setSessionCookieNeeded, setSockJsClientLibraryUrl, setStreamBytesLimit, setSuppressCors, setWebSocketEnabled, shouldSuppressCors`

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

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

    - ### Methods inherited from interface org.springframework.web.socket.sockjs.transport.SockJsServiceConfig

      `getHeartbeatTime, getHttpMessageCacheSize, getStreamBytesLimit, getTaskScheduler`

- - ### Constructor Detail

    - #### TransportHandlingSockJsService

          public TransportHandlingSockJsService(TaskScheduler scheduler,
                                                TransportHandler... handlers)

      Create a TransportHandlingSockJsService with given `handler` types.
      Parameters:
        `scheduler` - a task scheduler for heart-beat messages and removing timed-out sessions; the provided TaskScheduler should be declared as a Spring bean to ensure it gets initialized at start-up and shuts down when the application stops
        `handlers` - one or more `TransportHandler` implementations to use

    - #### TransportHandlingSockJsService

          public TransportHandlingSockJsService(TaskScheduler scheduler,
                                                Collection<TransportHandler> handlers)

      Create a TransportHandlingSockJsService with given `handler` types.
      Parameters:
        `scheduler` - a task scheduler for heart-beat messages and removing timed-out sessions; the provided TaskScheduler should be declared as a Spring bean to ensure it gets initialized at start-up and shuts down when the application stops
        `handlers` - one or more `TransportHandler` implementations to use

  - ### Method Detail

    - #### getTransportHandlers

          public Map<TransportType,TransportHandler> getTransportHandlers()

      Return the registered handlers per transport type.

    - #### setMessageCodec

          public void setMessageCodec(SockJsMessageCodec messageCodec)

      The codec to use for encoding and decoding SockJS messages.

    - #### getMessageCodec

          public SockJsMessageCodec getMessageCodec()

      Description copied from interface: `SockJsServiceConfig`
      The codec to use for encoding and decoding SockJS messages.
      Specified by:
        `getMessageCodec` in interface `SockJsServiceConfig`

    - #### setHandshakeInterceptors

          public void setHandshakeInterceptors(@Nullable
                                               List<HandshakeInterceptor> interceptors)

      Configure one or more WebSocket handshake request interceptors.

    - #### getHandshakeInterceptors

          public List<HandshakeInterceptor> getHandshakeInterceptors()

      Return the configured WebSocket handshake request interceptors.

    - #### start

          public void start()

      Description copied from interface: `Lifecycle`
      Start this component.

      Should not throw an exception if the component is already running.

      In the case of a container, this will propagate the start signal to all components that apply.

      Specified by:
        `start` in interface `Lifecycle`
      See Also:
        `SmartLifecycle.isAutoStartup()`

    - #### stop

          public void stop()

      Description copied from interface: `Lifecycle`
      Stop this component, typically in a synchronous fashion, such that the component is fully stopped upon return of this method. Consider implementing `SmartLifecycle` and its `stop(Runnable)` variant when asynchronous stop behavior is necessary.

      Note that this stop notification is not guaranteed to come before destruction: On regular shutdown, `Lifecycle` beans will first receive a stop notification before the general destruction callbacks are being propagated; however, on hot refresh during a context's lifetime or on aborted refresh attempts, a given bean's destroy method will be called without any consideration of stop signals upfront.

      Should not throw an exception if the component is not running (not started yet).

      In the case of a container, this will propagate the stop signal to all components that apply.

      Specified by:
        `stop` in interface `Lifecycle`
      See Also:
        `SmartLifecycle.stop(Runnable)`, `DisposableBean.destroy()`

    - #### isRunning

          public boolean isRunning()

      Description copied from interface: `Lifecycle`
      Check whether this component is currently running.

      In the case of a container, this will return `true` only if all components that apply are currently running.

      Specified by:
        `isRunning` in interface `Lifecycle`
      Returns:
        whether the component is currently running

    - #### handleRawWebSocketRequest

          protected void handleRawWebSocketRequest(ServerHttpRequest request,
                                                   ServerHttpResponse response,
                                                   WebSocketHandler handler)
                                            throws IOException

      Description copied from class: `AbstractSockJsService`
      Handle request for raw WebSocket communication, i.e. without any SockJS message framing.
      Specified by:
        `handleRawWebSocketRequest` in class `AbstractSockJsService`
      Throws:
        `IOException`

    - #### handleTransportRequest

          protected void handleTransportRequest(ServerHttpRequest request,
                                                ServerHttpResponse response,
                                                WebSocketHandler handler,
                                                String sessionId,
                                                String transport)
                                         throws SockJsException

      Description copied from class: `AbstractSockJsService`
      Handle a SockJS session URL (i.e. transport-specific request).
      Specified by:
        `handleTransportRequest` in class `AbstractSockJsService`
      Throws:
        `SockJsException`

    - #### validateRequest

          protected boolean validateRequest(String serverId,
                                            String sessionId,
                                            String transport)

      Overrides:
        `validateRequest` in class `AbstractSockJsService`