diff --git a/spring-websocket/src/main/java/org/springframework/sockjs/package-info.java b/spring-websocket/src/main/java/org/springframework/sockjs/package-info.java new file mode 100644 index 0000000000..5b2f27cafe --- /dev/null +++ b/spring-websocket/src/main/java/org/springframework/sockjs/package-info.java @@ -0,0 +1,7 @@ + +/** + * Common abstractions and Spring configuration support for the SockJS protocol. + * + */ +package org.springframework.sockjs; + diff --git a/spring-websocket/src/main/java/org/springframework/sockjs/server/package-info.java b/spring-websocket/src/main/java/org/springframework/sockjs/server/package-info.java new file mode 100644 index 0000000000..8748c1b582 --- /dev/null +++ b/spring-websocket/src/main/java/org/springframework/sockjs/server/package-info.java @@ -0,0 +1,7 @@ + +/** + * Server-side SockJS abstractions and base classes. + * + */ +package org.springframework.sockjs.server; + diff --git a/spring-websocket/src/main/java/org/springframework/sockjs/server/support/SockJsServiceHandlerMapping.java b/spring-websocket/src/main/java/org/springframework/sockjs/server/support/SockJsServiceHandlerMapping.java index c40565ecac..656324fe5b 100644 --- a/spring-websocket/src/main/java/org/springframework/sockjs/server/support/SockJsServiceHandlerMapping.java +++ b/spring-websocket/src/main/java/org/springframework/sockjs/server/support/SockJsServiceHandlerMapping.java @@ -15,18 +15,28 @@ */ package org.springframework.sockjs.server.support; +import java.io.IOException; import java.util.Arrays; import java.util.List; +import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.http.server.AsyncServletServerHttpRequest; +import org.springframework.http.server.ServerHttpRequest; +import org.springframework.http.server.ServerHttpResponse; +import org.springframework.http.server.ServletServerHttpResponse; import org.springframework.sockjs.server.AbstractSockJsService; +import org.springframework.web.HttpRequestHandler; import org.springframework.web.servlet.handler.AbstractHandlerMapping; +import org.springframework.web.util.NestedServletException; /** - * A Spring MVC HandlerMapping matching requests to SockJS services by prefix. + * A Spring MVC HandlerMapping for matching requests to a SockJS services based on the + * {@link AbstractSockJsService#getPrefix() prefix} property of each service. * * @author Rossen Stoyanchev * @since 4.0 @@ -56,7 +66,7 @@ public class SockJsServiceHandlerMapping extends AbstractHandlerMapping { logger.debug("Matched to " + service); } String sockJsPath = lookupPath.substring(service.getPrefix().length()); - return new SockJsServiceHttpRequestHandler(sockJsPath, service); + return new SockJsServiceHttpRequestHandler(service, sockJsPath); } } @@ -67,4 +77,37 @@ public class SockJsServiceHandlerMapping extends AbstractHandlerMapping { return null; } + + /** + * {@link HttpRequestHandler} wrapping the invocation of the selected SockJS service. + */ + private static class SockJsServiceHttpRequestHandler implements HttpRequestHandler { + + private final String sockJsPath; + + private final AbstractSockJsService sockJsService; + + + public SockJsServiceHttpRequestHandler(AbstractSockJsService sockJsService, String sockJsPath) { + this.sockJsService = sockJsService; + this.sockJsPath = sockJsPath; + } + + @Override + public void handleRequest(HttpServletRequest request, HttpServletResponse response) + throws ServletException, IOException { + + ServerHttpRequest httpRequest = new AsyncServletServerHttpRequest(request, response); + ServerHttpResponse httpResponse = new ServletServerHttpResponse(response); + + try { + this.sockJsService.handleRequest(httpRequest, httpResponse, this.sockJsPath); + } + catch (Exception ex) { + // TODO + throw new NestedServletException("SockJS service failure", ex); + } + } + } + } diff --git a/spring-websocket/src/main/java/org/springframework/sockjs/server/support/package-info.java b/spring-websocket/src/main/java/org/springframework/sockjs/server/support/package-info.java new file mode 100644 index 0000000000..b2030dead7 --- /dev/null +++ b/spring-websocket/src/main/java/org/springframework/sockjs/server/support/package-info.java @@ -0,0 +1,9 @@ + +/** + * Server-side SockJS classes including a + * {@link org.springframework.sockjs.server.support.DefaultSockJsService} implementation + * as well as a Spring MVC HandlerMapping mapping SockJS services to incoming requests. + * + */ +package org.springframework.sockjs.server.support; + diff --git a/spring-websocket/src/main/java/org/springframework/sockjs/server/transport/EndpointWebSocketTransportHandler.java b/spring-websocket/src/main/java/org/springframework/sockjs/server/transport/EndpointWebSocketTransportHandler.java index b6762111f3..8d41943c9a 100644 --- a/spring-websocket/src/main/java/org/springframework/sockjs/server/transport/EndpointWebSocketTransportHandler.java +++ b/spring-websocket/src/main/java/org/springframework/sockjs/server/transport/EndpointWebSocketTransportHandler.java @@ -19,7 +19,7 @@ package org.springframework.sockjs.server.transport; import org.springframework.sockjs.server.SockJsConfiguration; import org.springframework.websocket.WebSocketHandler; import org.springframework.websocket.server.HandshakeHandler; -import org.springframework.websocket.server.endpoint.EndpointHandshakeHandler; +import org.springframework.websocket.server.endpoint.handshake.EndpointHandshakeHandler; /** diff --git a/spring-websocket/src/main/java/org/springframework/sockjs/server/transport/package-info.java b/spring-websocket/src/main/java/org/springframework/sockjs/server/transport/package-info.java new file mode 100644 index 0000000000..b31cef1145 --- /dev/null +++ b/spring-websocket/src/main/java/org/springframework/sockjs/server/transport/package-info.java @@ -0,0 +1,11 @@ + +/** + * Server-side support for SockJS transports including + * {@link org.springframework.sockjs.server.TransportHandler} implementations + * for processing incoming requests and their + * {@link org.springframework.sockjs.SockJsSession} counterparts for + * sending messages over the various transports. + * + */ +package org.springframework.sockjs.server.transport; + diff --git a/spring-websocket/src/main/java/org/springframework/websocket/client/package-info.java b/spring-websocket/src/main/java/org/springframework/websocket/client/package-info.java new file mode 100644 index 0000000000..28e7e9eb86 --- /dev/null +++ b/spring-websocket/src/main/java/org/springframework/websocket/client/package-info.java @@ -0,0 +1,7 @@ + +/** + * Client-side support for WebSocket applications. + * + */ +package org.springframework.websocket.client; + diff --git a/spring-websocket/src/main/java/org/springframework/websocket/support/StandardWebSocketSession.java b/spring-websocket/src/main/java/org/springframework/websocket/endpoint/StandardWebSocketSession.java similarity index 97% rename from spring-websocket/src/main/java/org/springframework/websocket/support/StandardWebSocketSession.java rename to spring-websocket/src/main/java/org/springframework/websocket/endpoint/StandardWebSocketSession.java index d3384ed6b0..302a033392 100644 --- a/spring-websocket/src/main/java/org/springframework/websocket/support/StandardWebSocketSession.java +++ b/spring-websocket/src/main/java/org/springframework/websocket/endpoint/StandardWebSocketSession.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.websocket.support; +package org.springframework.websocket.endpoint; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-websocket/src/main/java/org/springframework/websocket/support/WebSocketHandlerEndpoint.java b/spring-websocket/src/main/java/org/springframework/websocket/endpoint/WebSocketHandlerEndpoint.java similarity index 98% rename from spring-websocket/src/main/java/org/springframework/websocket/support/WebSocketHandlerEndpoint.java rename to spring-websocket/src/main/java/org/springframework/websocket/endpoint/WebSocketHandlerEndpoint.java index 017d0181ea..b70076b3d8 100644 --- a/spring-websocket/src/main/java/org/springframework/websocket/support/WebSocketHandlerEndpoint.java +++ b/spring-websocket/src/main/java/org/springframework/websocket/endpoint/WebSocketHandlerEndpoint.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.websocket.support; +package org.springframework.websocket.endpoint; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; diff --git a/spring-websocket/src/main/java/org/springframework/websocket/endpoint/package-info.java b/spring-websocket/src/main/java/org/springframework/websocket/endpoint/package-info.java new file mode 100644 index 0000000000..99723de31d --- /dev/null +++ b/spring-websocket/src/main/java/org/springframework/websocket/endpoint/package-info.java @@ -0,0 +1,8 @@ + +/** + * Classes for use with the standard Java WebSocket endpoints from both client and + * server code. + * + */ +package org.springframework.websocket.endpoint; + diff --git a/spring-websocket/src/main/java/org/springframework/websocket/package-info.java b/spring-websocket/src/main/java/org/springframework/websocket/package-info.java new file mode 100644 index 0000000000..8bf3b32aa5 --- /dev/null +++ b/spring-websocket/src/main/java/org/springframework/websocket/package-info.java @@ -0,0 +1,7 @@ + +/** + * Common abstractions and Spring configuration support for WebSocket applications. + * + */ +package org.springframework.websocket; + diff --git a/spring-websocket/src/main/java/org/springframework/websocket/server/AbstractHandshakeHandler.java b/spring-websocket/src/main/java/org/springframework/websocket/server/AbstractHandshakeHandler.java index eaba42d78b..7ff08b8097 100644 --- a/spring-websocket/src/main/java/org/springframework/websocket/server/AbstractHandshakeHandler.java +++ b/spring-websocket/src/main/java/org/springframework/websocket/server/AbstractHandshakeHandler.java @@ -38,8 +38,6 @@ import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.util.Assert; import org.springframework.util.StringUtils; -import org.springframework.web.util.UriComponentsBuilder; -import org.springframework.websocket.WebSocketHandler; /** @@ -53,25 +51,25 @@ public abstract class AbstractHandshakeHandler implements HandshakeHandler, Bean protected Log logger = LogFactory.getLog(getClass()); - private final WebSocketHandler webSocketHandler; + private final Object webSocketHandler; - private final Class handlerClass; + private final Class webSocketHandlerClass; private List supportedProtocols; private AutowireCapableBeanFactory beanFactory; - public AbstractHandshakeHandler(WebSocketHandler webSocketHandler) { - Assert.notNull(webSocketHandler, "webSocketHandler is required"); - this.webSocketHandler = webSocketHandler; - this.handlerClass = null; + public AbstractHandshakeHandler(Object handler) { + Assert.notNull(handler, "webSocketHandler is required"); + this.webSocketHandler = handler; + this.webSocketHandlerClass = null; } - public AbstractHandshakeHandler(Class handlerClass) { + public AbstractHandshakeHandler(Class handlerClass) { Assert.notNull((handlerClass), "handlerClass is required"); this.webSocketHandler = null; - this.handlerClass = handlerClass; + this.webSocketHandlerClass = handlerClass; } public void setSupportedProtocols(String... protocols) { @@ -89,10 +87,10 @@ public abstract class AbstractHandshakeHandler implements HandshakeHandler, Bean } } - protected WebSocketHandler getWebSocketHandler() { - if (this.handlerClass != null) { - Assert.notNull(this.beanFactory, "BeanFactory is required for WebSocketHandler instance per request."); - return this.beanFactory.createBean(this.handlerClass); + protected Object getWebSocketHandler() { + if (this.webSocketHandlerClass != null) { + Assert.notNull(this.beanFactory, "BeanFactory is required for WebSocket handler instances per request."); + return this.beanFactory.createBean(this.webSocketHandlerClass); } else { return this.webSocketHandler; diff --git a/spring-websocket/src/main/java/org/springframework/websocket/server/HandshakeHandler.java b/spring-websocket/src/main/java/org/springframework/websocket/server/HandshakeHandler.java index 684bc36253..a8da4981ac 100644 --- a/spring-websocket/src/main/java/org/springframework/websocket/server/HandshakeHandler.java +++ b/spring-websocket/src/main/java/org/springframework/websocket/server/HandshakeHandler.java @@ -21,13 +21,13 @@ import org.springframework.http.server.ServerHttpResponse; /** + * Abstraction for integrating a WebSocket implementation some HTTP processing pipeline. * * @author Rossen Stoyanchev * @since 4.0 */ public interface HandshakeHandler { - boolean doHandshake(ServerHttpRequest request, ServerHttpResponse response) throws Exception; } diff --git a/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/EndpointExporter.java b/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/EndpointExporter.java index 0596a27a81..76194c4ecd 100644 --- a/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/EndpointExporter.java +++ b/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/EndpointExporter.java @@ -35,7 +35,7 @@ import org.springframework.util.ObjectUtils; /** * BeanPostProcessor that detects beans of type - * {@link javax.websocket.server.ServerEndpointConfig} and registers the corresponding + * {@link javax.websocket.server.ServerEndpointConfig} and registers the provided * {@link javax.websocket.Endpoint} with a standard Java WebSocket runtime. * *

If the runtime is a Servlet container, use {@link ServletEndpointExporter}. diff --git a/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/EndpointRegistration.java b/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/EndpointRegistration.java index 8e373c0261..9dfc509042 100644 --- a/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/EndpointRegistration.java +++ b/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/EndpointRegistration.java @@ -36,7 +36,7 @@ import org.springframework.util.Assert; import org.springframework.util.ClassUtils; import org.springframework.web.context.ContextLoader; import org.springframework.web.context.WebApplicationContext; -import org.springframework.websocket.support.WebSocketHandlerEndpoint; +import org.springframework.websocket.endpoint.WebSocketHandlerEndpoint; /** diff --git a/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/EndpointRequestUpgradeStrategy.java b/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/EndpointRequestUpgradeStrategy.java index bcd8a70dd1..2047243429 100644 --- a/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/EndpointRequestUpgradeStrategy.java +++ b/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/EndpointRequestUpgradeStrategy.java @@ -23,7 +23,8 @@ import org.springframework.http.server.ServerHttpResponse; /** - * A strategy for performing the runtime-specific parts of a WebSocket upgrade request. + * A strategy for performing the container-specific steps for upgrading an HTTP request + * as part of a WebSocket handshake. * * @author Rossen Stoyanchev * @since 4.0 diff --git a/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/ServletEndpointExporter.java b/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/ServletEndpointExporter.java index d62b2f44c6..b5b216fc8b 100644 --- a/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/ServletEndpointExporter.java +++ b/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/ServletEndpointExporter.java @@ -32,10 +32,8 @@ import org.springframework.web.context.ServletContextAware; */ public class ServletEndpointExporter extends EndpointExporter implements ServletContextAware { - /** - * - */ private static final String SERVER_CONTAINER_ATTR_NAME = "javax.websocket.server.ServerContainer"; + private ServletContext servletContext; diff --git a/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/EndpointHandshakeHandler.java b/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/handshake/EndpointHandshakeHandler.java similarity index 72% rename from spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/EndpointHandshakeHandler.java rename to spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/handshake/EndpointHandshakeHandler.java index 9758aab2d4..a63033361f 100644 --- a/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/EndpointHandshakeHandler.java +++ b/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/handshake/EndpointHandshakeHandler.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.websocket.server.endpoint; +package org.springframework.websocket.server.endpoint.handshake; import javax.websocket.Endpoint; @@ -23,13 +23,18 @@ import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.util.ClassUtils; import org.springframework.websocket.WebSocketHandler; +import org.springframework.websocket.endpoint.WebSocketHandlerEndpoint; import org.springframework.websocket.server.AbstractHandshakeHandler; import org.springframework.websocket.server.HandshakeHandler; -import org.springframework.websocket.support.WebSocketHandlerEndpoint; +import org.springframework.websocket.server.endpoint.EndpointRequestUpgradeStrategy; /** - * A {@link HandshakeHandler} for use with standard Java WebSocket. + * A {@link HandshakeHandler} for use with standard Java WebSocket runtimes. A + * container-specific {@link EndpointRequestUpgradeStrategy} is required since standard + * Java WebSocket currently does not provide any means of integrating a WebSocket + * handshake into an HTTP request processing pipeline. Currently available are + * implementations for Tomcat and Glassfish. * * @author Rossen Stoyanchev * @since 4.0 @@ -45,12 +50,17 @@ public class EndpointHandshakeHandler extends AbstractHandshakeHandler { private final EndpointRequestUpgradeStrategy upgradeStrategy; + public EndpointHandshakeHandler(Endpoint endpoint) { + super(endpoint); + this.upgradeStrategy = createUpgradeStrategy(); + } + public EndpointHandshakeHandler(WebSocketHandler webSocketHandler) { super(webSocketHandler); this.upgradeStrategy = createUpgradeStrategy(); } - public EndpointHandshakeHandler(Class handlerClass) { + public EndpointHandshakeHandler(Class handlerClass) { super(handlerClass); this.upgradeStrategy = createUpgradeStrategy(); } @@ -85,7 +95,21 @@ public class EndpointHandshakeHandler extends AbstractHandshakeHandler { throws Exception { logger.debug("Upgrading HTTP request"); - Endpoint endpoint = new WebSocketHandlerEndpoint(getWebSocketHandler()); + + Object webSocketHandler = getWebSocketHandler(); + + Endpoint endpoint; + if (webSocketHandler instanceof Endpoint) { + endpoint = (Endpoint) webSocketHandler; + } + else if (webSocketHandler instanceof WebSocketHandler) { + endpoint = new WebSocketHandlerEndpoint((WebSocketHandler) webSocketHandler); + } + else { + String className = webSocketHandler.getClass().getName(); + throw new IllegalArgumentException("Unexpected WebSocket handler type: " + className); + } + this.upgradeStrategy.upgrade(request, response, protocol, endpoint); } diff --git a/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/support/GlassfishRequestUpgradeStrategy.java b/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/handshake/GlassfishRequestUpgradeStrategy.java similarity index 97% rename from spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/support/GlassfishRequestUpgradeStrategy.java rename to spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/handshake/GlassfishRequestUpgradeStrategy.java index 9690141b26..52750dc4d1 100644 --- a/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/support/GlassfishRequestUpgradeStrategy.java +++ b/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/handshake/GlassfishRequestUpgradeStrategy.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.websocket.server.endpoint.support; +package org.springframework.websocket.server.endpoint.handshake; import java.lang.reflect.Constructor; import java.net.URI; @@ -49,6 +49,8 @@ import org.springframework.websocket.server.endpoint.EndpointRegistration; import org.springframework.websocket.server.endpoint.EndpointRequestUpgradeStrategy; /** + * Glassfish support for upgrading an {@link HttpServletRequest} during a WebSocket + * handshake. * * @author Rossen Stoyanchev * @since 4.0 diff --git a/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/support/TomcatRequestUpgradeStrategy.java b/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/handshake/TomcatRequestUpgradeStrategy.java similarity index 94% rename from spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/support/TomcatRequestUpgradeStrategy.java rename to spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/handshake/TomcatRequestUpgradeStrategy.java index 3e4dc96b61..a44468bdab 100644 --- a/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/support/TomcatRequestUpgradeStrategy.java +++ b/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/handshake/TomcatRequestUpgradeStrategy.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.websocket.server.endpoint.support; +package org.springframework.websocket.server.endpoint.handshake; import java.lang.reflect.Method; import java.util.Collections; @@ -36,6 +36,7 @@ import org.springframework.websocket.server.endpoint.EndpointRequestUpgradeStrat /** + * Tomcat support for upgrading an {@link HttpServletRequest} during a WebSocket handshake. * * @author Rossen Stoyanchev * @since 4.0 diff --git a/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/handshake/package-info.java b/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/handshake/package-info.java new file mode 100644 index 0000000000..8adf2395cb --- /dev/null +++ b/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/handshake/package-info.java @@ -0,0 +1,8 @@ + +/** + * WebSocket handshake support for use with standard Java WebSocket runtimes including + * container-specific strategies for upgrading the HttpServletRequest. + * + */ +package org.springframework.websocket.server.endpoint.handshake; + diff --git a/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/package-info.java b/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/package-info.java index 3ede1f92bc..ce327f239e 100644 --- a/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/package-info.java +++ b/spring-websocket/src/main/java/org/springframework/websocket/server/endpoint/package-info.java @@ -1,8 +1,13 @@ /** - * - * Server-specific support for configuring and adapting standard Java WebSocket endpoint's. - * + * Server classes for use with standard Java WebSocket endpoints including + * {@link org.springframework.websocket.server.endpoint.EndpointRegistration} and + * {@link org.springframework.websocket.server.endpoint.EndpointExporter} for + * registering type-based endpoints, + * {@link org.springframework.websocket.server.endpoint.SpringConfigurator} for + * instantiating annotated endpoints through Spring, and + * {@link org.springframework.websocket.server.endpoint.handshake.EndpointHandshakeHandler} + * for integrating endpoints into HTTP request processing. */ package org.springframework.websocket.server.endpoint; diff --git a/spring-websocket/src/main/java/org/springframework/websocket/server/package-info.java b/spring-websocket/src/main/java/org/springframework/websocket/server/package-info.java new file mode 100644 index 0000000000..8a44c0bc88 --- /dev/null +++ b/spring-websocket/src/main/java/org/springframework/websocket/server/package-info.java @@ -0,0 +1,7 @@ + +/** + * Server-side abstractions for WebSocket applications. + * + */ +package org.springframework.websocket.server; + diff --git a/spring-websocket/src/main/java/org/springframework/sockjs/server/support/SockJsServiceHttpRequestHandler.java b/spring-websocket/src/main/java/org/springframework/websocket/server/support/HandshakeHttpRequestHandler.java similarity index 62% rename from spring-websocket/src/main/java/org/springframework/sockjs/server/support/SockJsServiceHttpRequestHandler.java rename to spring-websocket/src/main/java/org/springframework/websocket/server/support/HandshakeHttpRequestHandler.java index 57d3baf333..26f5d59ae1 100644 --- a/spring-websocket/src/main/java/org/springframework/sockjs/server/support/SockJsServiceHttpRequestHandler.java +++ b/spring-websocket/src/main/java/org/springframework/websocket/server/support/HandshakeHttpRequestHandler.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, @@ -13,7 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.sockjs.server.support; + +package org.springframework.websocket.server.support; import java.io.IOException; @@ -21,45 +22,46 @@ import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.springframework.http.server.AsyncServletServerHttpRequest; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; +import org.springframework.http.server.ServletServerHttpRequest; import org.springframework.http.server.ServletServerHttpResponse; -import org.springframework.sockjs.server.AbstractSockJsService; +import org.springframework.util.Assert; import org.springframework.web.HttpRequestHandler; import org.springframework.web.util.NestedServletException; +import org.springframework.websocket.server.HandshakeHandler; + /** - * A Spring MVC {@link HttpRequestHandler} wrapping the invocation of a SockJS service. + * A Spring MVC {@link HttpRequestHandler} wrapping the invocation of a WebSocket + * {@link HandshakeHandler}; * * @author Rossen Stoyanchev * @since 4.0 */ -public class SockJsServiceHttpRequestHandler implements HttpRequestHandler { +public class HandshakeHttpRequestHandler implements HttpRequestHandler { - private final String sockJsPath; - - private final AbstractSockJsService sockJsService; + private final HandshakeHandler handshakeHandler; - public SockJsServiceHttpRequestHandler(String sockJsPath, AbstractSockJsService sockJsService) { - this.sockJsService = sockJsService; - this.sockJsPath = sockJsPath; + public HandshakeHttpRequestHandler(HandshakeHandler handshakeHandler) { + Assert.notNull(handshakeHandler, "handshakeHandler is required"); + this.handshakeHandler = handshakeHandler; } @Override public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - ServerHttpRequest httpRequest = new AsyncServletServerHttpRequest(request, response); + ServerHttpRequest httpRequest = new ServletServerHttpRequest(request); ServerHttpResponse httpResponse = new ServletServerHttpResponse(response); try { - this.sockJsService.handleRequest(httpRequest, httpResponse, this.sockJsPath); + this.handshakeHandler.doHandshake(httpRequest, httpResponse); } - catch (Exception ex) { + catch (Exception e) { // TODO - throw new NestedServletException("SockJS service failure", ex); + throw new NestedServletException("HandshakeHandler failure", e); } } diff --git a/spring-websocket/src/main/java/org/springframework/websocket/server/support/package-info.java b/spring-websocket/src/main/java/org/springframework/websocket/server/support/package-info.java new file mode 100644 index 0000000000..c76d943d9f --- /dev/null +++ b/spring-websocket/src/main/java/org/springframework/websocket/server/support/package-info.java @@ -0,0 +1,7 @@ + +/** + * Server-side support classes for WebSocket applications. + * + */ +package org.springframework.websocket.server.support; + diff --git a/spring-websocket/src/main/java/org/springframework/websocket/support/package-info.java b/spring-websocket/src/main/java/org/springframework/websocket/support/package-info.java deleted file mode 100644 index b30d21c7ab..0000000000 --- a/spring-websocket/src/main/java/org/springframework/websocket/support/package-info.java +++ /dev/null @@ -1,8 +0,0 @@ - -/** - * - * Support for working with standard Java WebSocket Endpoint's. - * - */ -package org.springframework.websocket.support; -