From 1dff45c38a03ace8ebe4466f17331d7de1c77969 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Tue, 3 Dec 2013 01:30:22 +0100 Subject: [PATCH] Consistent ".jetty" and ".standard" subpackages; consolidated GlassFishRequestUpgradeStrategy implementation; renamed Text/BinaryWebSocketHandler and moved them to web.socket.support --- ...eStrategy.java => SubProtocolCapable.java} | 22 ++-- .../web/socket/WebSocketExtension.java | 63 ----------- .../web/socket/WebSocketHandler.java | 2 +- .../{support => }/WebSocketHttpHeaders.java | 8 +- ...ion.java => AbstractWebSocketSession.java} | 6 +- .../JettyWebSocketHandlerAdapter.java | 6 +- .../{ => jetty}/JettyWebSocketSession.java | 6 +- ...ebSocketToJettyExtensionConfigAdapter.java | 37 +++++++ .../socket/adapter/jetty/package-info.java | 21 ++++ .../web/socket/adapter/package-info.java | 4 +- .../ConvertingEncoderDecoderSupport.java | 2 +- .../StandardToWebSocketExtensionAdapter.java | 36 +++++++ .../StandardWebSocketHandlerAdapter.java | 4 +- .../StandardWebSocketSession.java | 10 +- .../WebSocketToStandardExtensionAdapter.java | 61 +++++++++++ .../socket/adapter/standard/package-info.java | 21 ++++ .../client/AbstractWebSocketClient.java | 2 +- .../web/socket/client/WebSocketClient.java | 2 +- .../client/WebSocketConnectionManager.java | 4 +- .../client/jetty/JettyWebSocketClient.java | 11 +- .../web/socket/client/jetty/package-info.java | 21 ++++ .../AnnotatedEndpointConnectionManager.java | 4 +- .../EndpointConnectionManager.java | 4 +- .../StandardWebSocketClient.java | 9 +- .../WebSocketContainerFactoryBean.java | 2 +- .../{endpoint => standard}/package-info.java | 2 +- .../WebMvcStompEndpointRegistry.java | 2 +- .../AbstractWebSocketHandler.java} | 5 +- .../BeanCreatingHandlerProvider.java | 2 +- .../BinaryWebSocketHandler.java} | 4 +- .../ExceptionWebSocketHandlerDecorator.java | 2 +- .../LoggingWebSocketHandlerDecorator.java | 2 +- .../PerConnectionWebSocketHandler.java | 2 +- .../TextWebSocketHandler.java} | 4 +- .../WebSocketHandlerDecorator.java | 4 +- .../{support => handler}/package-info.java | 8 +- .../SubProtocolWebSocketHandler.java | 20 +++- .../web/socket/server/HandshakeHandler.java | 2 +- .../JettyRequestUpgradeStrategy.java | 28 ++--- .../web/socket/server/jetty/package-info.java | 21 ++++ .../AbstractStandardUpgradeStrategy.java | 20 ++-- .../GlassFishRequestUpgradeStrategy.java} | 102 ++++++++++++------ .../ServerEndpointExporter.java | 4 +- .../ServerEndpointRegistration.java | 5 +- .../ServletServerContainerFactoryBean.java | 4 +- .../SpringConfigurator.java | 4 +- .../TomcatRequestUpgradeStrategy.java | 4 +- .../socket/server/standard/package-info.java | 21 ++++ .../support/DefaultHandshakeHandler.java | 56 +++++----- .../GlassFish40RequestUpgradeStrategy.java | 62 ----------- .../support/HandshakeInterceptorChain.java | 3 +- .../HttpSessionHandshakeInterceptor.java | 2 +- .../support/WebSocketHttpRequestHandler.java | 4 +- .../sockjs/SockJsHttpRequestHandler.java | 4 +- .../web/socket/sockjs/SockJsService.java | 2 +- .../handler/SockJsWebSocketHandler.java | 4 +- .../socket/support/SubProtocolCapable.java | 18 ---- .../AbstractWebSocketIntegrationTests.java | 4 +- .../web/socket/WebSocketIntegrationTests.java | 11 +- .../ConvertingEncoderDecoderSupportTests.java | 3 +- .../JettyWebSocketHandlerAdapterTests.java | 4 +- .../StandardWebSocketHandlerAdapterTests.java | 4 +- .../WebSocketConnectionManagerTests.java | 19 ++-- .../jetty/JettyWebSocketClientTests.java | 12 +-- .../StandardWebSocketClientTests.java | 11 +- ...essageBrokerBeanDefinitionParserTests.java | 2 +- ...ractWebSocketHandlerRegistrationTests.java | 13 ++- .../WebSocketConfigurationTests.java | 13 +-- ...essageBrokerConfigurationSupportTests.java | 5 +- .../BeanCreatingHandlerProviderTests.java | 2 +- ...ceptionWebSocketHandlerDecoratorTests.java | 2 +- .../PerConnectionWebSocketHandlerTests.java | 5 +- .../{support => handler}/TestPrincipal.java | 2 +- .../TestWebSocketSession.java | 2 +- .../WebSocketHandlerDecoratorTests.java | 7 +- .../WebSocketHttpHeadersTests.java | 3 +- .../SimpAnnotationMethodIntegrationTests.java | 6 +- .../StompSubProtocolHandlerTests.java | 2 +- .../SubProtocolWebSocketHandlerTests.java | 2 +- .../server/DefaultHandshakeHandlerTests.java | 10 +- .../ServerEndpointExporterTests.java | 6 +- .../ServerEndpointRegistrationTests.java | 5 +- .../SpringConfiguratorTests.java | 3 +- .../session/AbstractSockJsSessionTests.java | 2 +- .../WebSocketServerSockJsSessionTests.java | 2 +- 85 files changed, 544 insertions(+), 413 deletions(-) rename spring-websocket/src/main/java/org/springframework/web/socket/{server/support/GlassFishRequestUpgradeStrategy.java => SubProtocolCapable.java} (53%) rename spring-websocket/src/main/java/org/springframework/web/socket/{support => }/WebSocketHttpHeaders.java (98%) rename spring-websocket/src/main/java/org/springframework/web/socket/adapter/{AbstractWebSocketSesssion.java => AbstractWebSocketSession.java} (94%) rename spring-websocket/src/main/java/org/springframework/web/socket/adapter/{ => jetty}/JettyWebSocketHandlerAdapter.java (97%) rename spring-websocket/src/main/java/org/springframework/web/socket/adapter/{ => jetty}/JettyWebSocketSession.java (96%) create mode 100644 spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/WebSocketToJettyExtensionConfigAdapter.java create mode 100644 spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/package-info.java rename spring-websocket/src/main/java/org/springframework/web/socket/adapter/{ => standard}/ConvertingEncoderDecoderSupport.java (99%) create mode 100644 spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/StandardToWebSocketExtensionAdapter.java rename spring-websocket/src/main/java/org/springframework/web/socket/adapter/{ => standard}/StandardWebSocketHandlerAdapter.java (97%) rename spring-websocket/src/main/java/org/springframework/web/socket/adapter/{ => standard}/StandardWebSocketSession.java (93%) create mode 100644 spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/WebSocketToStandardExtensionAdapter.java create mode 100644 spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/package-info.java create mode 100644 spring-websocket/src/main/java/org/springframework/web/socket/client/jetty/package-info.java rename spring-websocket/src/main/java/org/springframework/web/socket/client/{endpoint => standard}/AnnotatedEndpointConnectionManager.java (97%) rename spring-websocket/src/main/java/org/springframework/web/socket/client/{endpoint => standard}/EndpointConnectionManager.java (97%) rename spring-websocket/src/main/java/org/springframework/web/socket/client/{endpoint => standard}/StandardWebSocketClient.java (93%) rename spring-websocket/src/main/java/org/springframework/web/socket/client/{endpoint => standard}/WebSocketContainerFactoryBean.java (97%) rename spring-websocket/src/main/java/org/springframework/web/socket/client/{endpoint => standard}/package-info.java (92%) rename spring-websocket/src/main/java/org/springframework/web/socket/{adapter/WebSocketHandlerAdapter.java => handler/AbstractWebSocketHandler.java} (95%) rename spring-websocket/src/main/java/org/springframework/web/socket/{support => handler}/BeanCreatingHandlerProvider.java (98%) rename spring-websocket/src/main/java/org/springframework/web/socket/{adapter/BinaryWebSocketHandlerAdapter.java => handler/BinaryWebSocketHandler.java} (91%) rename spring-websocket/src/main/java/org/springframework/web/socket/{support => handler}/ExceptionWebSocketHandlerDecorator.java (98%) rename spring-websocket/src/main/java/org/springframework/web/socket/{support => handler}/LoggingWebSocketHandlerDecorator.java (98%) rename spring-websocket/src/main/java/org/springframework/web/socket/{support => handler}/PerConnectionWebSocketHandler.java (98%) rename spring-websocket/src/main/java/org/springframework/web/socket/{adapter/TextWebSocketHandlerAdapter.java => handler/TextWebSocketHandler.java} (92%) rename spring-websocket/src/main/java/org/springframework/web/socket/{support => handler}/WebSocketHandlerDecorator.java (95%) rename spring-websocket/src/main/java/org/springframework/web/socket/{support => handler}/package-info.java (66%) rename spring-websocket/src/main/java/org/springframework/web/socket/server/{support => jetty}/JettyRequestUpgradeStrategy.java (91%) create mode 100644 spring-websocket/src/main/java/org/springframework/web/socket/server/jetty/package-info.java rename spring-websocket/src/main/java/org/springframework/web/socket/server/{support => standard}/AbstractStandardUpgradeStrategy.java (85%) rename spring-websocket/src/main/java/org/springframework/web/socket/server/{support/AbstractGlassFishRequestUpgradeStrategy.java => standard/GlassFishRequestUpgradeStrategy.java} (64%) rename spring-websocket/src/main/java/org/springframework/web/socket/server/{support => standard}/ServerEndpointExporter.java (99%) rename spring-websocket/src/main/java/org/springframework/web/socket/server/{support => standard}/ServerEndpointRegistration.java (98%) rename spring-websocket/src/main/java/org/springframework/web/socket/server/{support => standard}/ServletServerContainerFactoryBean.java (95%) rename spring-websocket/src/main/java/org/springframework/web/socket/server/{support => standard}/SpringConfigurator.java (98%) rename spring-websocket/src/main/java/org/springframework/web/socket/server/{support => standard}/TomcatRequestUpgradeStrategy.java (98%) create mode 100644 spring-websocket/src/main/java/org/springframework/web/socket/server/standard/package-info.java delete mode 100644 spring-websocket/src/main/java/org/springframework/web/socket/server/support/GlassFish40RequestUpgradeStrategy.java delete mode 100644 spring-websocket/src/main/java/org/springframework/web/socket/support/SubProtocolCapable.java rename spring-websocket/src/test/java/org/springframework/web/socket/client/{endpoint => standard}/StandardWebSocketClientTests.java (94%) rename spring-websocket/src/test/java/org/springframework/web/socket/{support => handler}/BeanCreatingHandlerProviderTests.java (98%) rename spring-websocket/src/test/java/org/springframework/web/socket/{support => handler}/ExceptionWebSocketHandlerDecoratorTests.java (98%) rename spring-websocket/src/test/java/org/springframework/web/socket/{support => handler}/PerConnectionWebSocketHandlerTests.java (90%) rename spring-websocket/src/test/java/org/springframework/web/socket/{support => handler}/TestPrincipal.java (96%) rename spring-websocket/src/test/java/org/springframework/web/socket/{support => handler}/TestWebSocketSession.java (98%) rename spring-websocket/src/test/java/org/springframework/web/socket/{support => handler}/WebSocketHandlerDecoratorTests.java (85%) rename spring-websocket/src/test/java/org/springframework/web/socket/{support => handler}/WebSocketHttpHeadersTests.java (93%) rename spring-websocket/src/test/java/org/springframework/web/socket/server/{endpoint => standard}/ServerEndpointExporterTests.java (90%) rename spring-websocket/src/test/java/org/springframework/web/socket/server/{endpoint => standard}/ServerEndpointRegistrationTests.java (91%) rename spring-websocket/src/test/java/org/springframework/web/socket/server/{endpoint => standard}/SpringConfiguratorTests.java (96%) diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/GlassFishRequestUpgradeStrategy.java b/spring-websocket/src/main/java/org/springframework/web/socket/SubProtocolCapable.java similarity index 53% rename from spring-websocket/src/main/java/org/springframework/web/socket/server/support/GlassFishRequestUpgradeStrategy.java rename to spring-websocket/src/main/java/org/springframework/web/socket/SubProtocolCapable.java index d5c68d9c297..ef907cad3bd 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/GlassFishRequestUpgradeStrategy.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/SubProtocolCapable.java @@ -14,25 +14,23 @@ * limitations under the License. */ -package org.springframework.web.socket.server.support; +package org.springframework.web.socket; -import org.glassfish.tyrus.core.EndpointWrapper; -import org.glassfish.tyrus.core.TyrusEndpoint; -import org.glassfish.tyrus.websockets.WebSocketApplication; +import java.util.List; /** - * Extension of the {@link AbstractGlassFishRequestUpgradeStrategy} that provides support - * for GlassFish 4.0.1 and beyond. + * An interface for WebSocket handlers that support sub-protocols as defined in RFC 6455. * * @author Rossen Stoyanchev - * @author Michael Irwin * @since 4.0 + * @see WebSocketHandler + * @see RFC-6455 section 1.9 */ -public class GlassFishRequestUpgradeStrategy extends AbstractGlassFishRequestUpgradeStrategy { +public interface SubProtocolCapable { - @Override - protected WebSocketApplication createTyrusEndpoint(EndpointWrapper endpoint) { - return new TyrusEndpoint(endpoint); - } + /** + * Return the list of supported sub-protocols. + */ + List getSubProtocols(); } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/WebSocketExtension.java b/spring-websocket/src/main/java/org/springframework/web/socket/WebSocketExtension.java index 580b9dbe494..67c534a9546 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/WebSocketExtension.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/WebSocketExtension.java @@ -23,9 +23,6 @@ import java.util.List; import java.util.Locale; import java.util.Map; -import javax.websocket.Extension; - -import org.eclipse.jetty.websocket.api.extensions.ExtensionConfig; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; import org.springframework.util.LinkedCaseInsensitiveMap; @@ -177,64 +174,4 @@ public class WebSocketExtension { return str.toString(); } - - // Standard WebSocketExtension adapters - - public static class StandardToWebSocketExtensionAdapter extends WebSocketExtension { - - public StandardToWebSocketExtensionAdapter(Extension ext) { - super(ext.getName()); - for (Extension.Parameter p : ext.getParameters()) { - super.getParameters().put(p.getName(), p.getValue()); - } - } - } - - public static class WebSocketToStandardExtensionAdapter implements Extension { - - private final String name; - - private final List parameters = new ArrayList(); - - public WebSocketToStandardExtensionAdapter(final WebSocketExtension ext) { - this.name = ext.getName(); - for (final String paramName : ext.getParameters().keySet()) { - this.parameters.add(new Parameter() { - @Override - public String getName() { - return paramName; - } - @Override - public String getValue() { - return ext.getParameters().get(paramName); - } - }); - } - } - - @Override - public String getName() { - return name; - } - - @Override - public List getParameters() { - return this.parameters; - } - } - - // Jetty WebSocketExtension adapters - - public static class WebSocketToJettyExtensionConfigAdapter extends ExtensionConfig { - - public WebSocketToJettyExtensionConfigAdapter(WebSocketExtension extension) { - super(extension.getName()); - for (Map.Entry p : extension.getParameters().entrySet()) { - super.setParameter(p.getKey(), p.getValue()); - } - } - } - - - } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/WebSocketHandler.java b/spring-websocket/src/main/java/org/springframework/web/socket/WebSocketHandler.java index 16642408bc9..51c0c6ee706 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/WebSocketHandler.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/WebSocketHandler.java @@ -24,7 +24,7 @@ package org.springframework.web.socket; * the exception is logged and the session closed with * {@link CloseStatus#SERVER_ERROR SERVER_ERROR(1011)}. The exception handling * strategy is provided by - * {@link org.springframework.web.socket.support.ExceptionWebSocketHandlerDecorator + * {@link org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator * ExceptionWebSocketHandlerDecorator} and it can be customized or replaced by decorating * the {@link WebSocketHandler} with a different decorator. * diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/support/WebSocketHttpHeaders.java b/spring-websocket/src/main/java/org/springframework/web/socket/WebSocketHttpHeaders.java similarity index 98% rename from spring-websocket/src/main/java/org/springframework/web/socket/support/WebSocketHttpHeaders.java rename to spring-websocket/src/main/java/org/springframework/web/socket/WebSocketHttpHeaders.java index 9b88f6178a5..27aa8030bd1 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/support/WebSocketHttpHeaders.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/WebSocketHttpHeaders.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.support; +package org.springframework.web.socket; import java.util.ArrayList; import java.util.Collection; @@ -25,7 +25,6 @@ import java.util.Set; import org.springframework.http.HttpHeaders; import org.springframework.util.CollectionUtils; -import org.springframework.web.socket.WebSocketExtension; /** * An {@link org.springframework.http.HttpHeaders} variant that adds support for @@ -36,8 +35,6 @@ import org.springframework.web.socket.WebSocketExtension; */ public class WebSocketHttpHeaders extends HttpHeaders { - private static final long serialVersionUID = -6644521016187828916L; - public static final String SEC_WEBSOCKET_ACCEPT = "Sec-WebSocket-Accept"; public static final String SEC_WEBSOCKET_EXTENSIONS = "Sec-WebSocket-Extensions"; @@ -48,6 +45,9 @@ public class WebSocketHttpHeaders extends HttpHeaders { public static final String SEC_WEBSOCKET_VERSION = "Sec-WebSocket-Version"; + private static final long serialVersionUID = -6644521016187828916L; + + private final HttpHeaders headers; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/AbstractWebSocketSesssion.java b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/AbstractWebSocketSession.java similarity index 94% rename from spring-websocket/src/main/java/org/springframework/web/socket/adapter/AbstractWebSocketSesssion.java rename to spring-websocket/src/main/java/org/springframework/web/socket/adapter/AbstractWebSocketSession.java index b3ee658673d..d5b15daa097 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/AbstractWebSocketSesssion.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/AbstractWebSocketSession.java @@ -1,4 +1,5 @@ /* + * Copyright 2002-2013 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,6 +21,7 @@ import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; + import org.springframework.util.Assert; import org.springframework.web.socket.BinaryMessage; import org.springframework.web.socket.CloseStatus; @@ -35,7 +37,7 @@ import org.springframework.web.socket.WebSocketSession; * @author Rossen Stoyanchev * @since 4.0 */ -public abstract class AbstractWebSocketSesssion implements WebSocketSession, NativeWebSocketSession { +public abstract class AbstractWebSocketSession implements NativeWebSocketSession { protected final Log logger = LogFactory.getLog(getClass()); @@ -49,7 +51,7 @@ public abstract class AbstractWebSocketSesssion implements WebSocketSession, * @param handshakeAttributes attributes from the HTTP handshake to make available * through the WebSocket session */ - public AbstractWebSocketSesssion(Map handshakeAttributes) { + public AbstractWebSocketSession(Map handshakeAttributes) { this.handshakeAttributes = handshakeAttributes; } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/JettyWebSocketHandlerAdapter.java b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/JettyWebSocketHandlerAdapter.java similarity index 97% rename from spring-websocket/src/main/java/org/springframework/web/socket/adapter/JettyWebSocketHandlerAdapter.java rename to spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/JettyWebSocketHandlerAdapter.java index 1c792eda51e..ba746bf5c16 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/JettyWebSocketHandlerAdapter.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/JettyWebSocketHandlerAdapter.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.adapter; +package org.springframework.web.socket.adapter.jetty; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -33,7 +33,7 @@ import org.springframework.web.socket.CloseStatus; import org.springframework.web.socket.PongMessage; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketHandler; -import org.springframework.web.socket.support.ExceptionWebSocketHandlerDecorator; +import org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator; /** * Adapts {@link WebSocketHandler} to the Jetty 9 WebSocket API. @@ -52,10 +52,8 @@ public class JettyWebSocketHandlerAdapter { public JettyWebSocketHandlerAdapter(WebSocketHandler webSocketHandler, JettyWebSocketSession wsSession) { - Assert.notNull(webSocketHandler, "webSocketHandler must not be null"); Assert.notNull(wsSession, "wsSession must not be null"); - this.webSocketHandler = webSocketHandler; this.wsSession = wsSession; } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/JettyWebSocketSession.java b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/JettyWebSocketSession.java similarity index 96% rename from spring-websocket/src/main/java/org/springframework/web/socket/adapter/JettyWebSocketSession.java rename to spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/JettyWebSocketSession.java index 9ceca8dc661..bf2714eee52 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/JettyWebSocketSession.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/JettyWebSocketSession.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.adapter; +package org.springframework.web.socket.adapter.jetty; import java.io.IOException; import java.net.InetSocketAddress; @@ -24,6 +24,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import org.eclipse.jetty.websocket.api.Session; import org.eclipse.jetty.websocket.api.extensions.ExtensionConfig; import org.springframework.http.HttpHeaders; import org.springframework.util.ObjectUtils; @@ -34,6 +35,7 @@ import org.springframework.web.socket.PongMessage; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketExtension; import org.springframework.web.socket.WebSocketSession; +import org.springframework.web.socket.adapter.AbstractWebSocketSession; /** * A {@link WebSocketSession} for use with the Jetty 9 WebSocket API. @@ -42,7 +44,7 @@ import org.springframework.web.socket.WebSocketSession; * @author Rossen Stoyanchev * @since 4.0 */ -public class JettyWebSocketSession extends AbstractWebSocketSesssion { +public class JettyWebSocketSession extends AbstractWebSocketSession { private HttpHeaders headers; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/WebSocketToJettyExtensionConfigAdapter.java b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/WebSocketToJettyExtensionConfigAdapter.java new file mode 100644 index 00000000000..45fab4637b8 --- /dev/null +++ b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/WebSocketToJettyExtensionConfigAdapter.java @@ -0,0 +1,37 @@ +/* + * Copyright 2002-2013 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.web.socket.adapter.jetty; + +import java.util.Map; + +import org.eclipse.jetty.websocket.api.extensions.ExtensionConfig; + +import org.springframework.web.socket.WebSocketExtension; + +/** + * @author Rossen Stoyanchev + * @since 4.0 + */ +public class WebSocketToJettyExtensionConfigAdapter extends ExtensionConfig { + + public WebSocketToJettyExtensionConfigAdapter(WebSocketExtension extension) { + super(extension.getName()); + for (Map.Entry p : extension.getParameters().entrySet()) { + super.setParameter(p.getKey(), p.getValue()); + } + } +} diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/package-info.java b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/package-info.java new file mode 100644 index 00000000000..ad6c9639620 --- /dev/null +++ b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/jetty/package-info.java @@ -0,0 +1,21 @@ +/* + * Copyright 2002-2013 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Adapter classes for the Jetty WebSocket API. + */ +package org.springframework.web.socket.adapter.jetty; + diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/package-info.java b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/package-info.java index 0fb73ef5f63..551828030af 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/package-info.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/package-info.java @@ -15,9 +15,7 @@ */ /** - * Classes adapting Spring's WebSocket API classes to and from WebSocket - * implementations. Also contains convenient base classes for - * {@link org.springframework.web.socket.WebSocketHandler} implementations. + * Classes adapting Spring's WebSocket API to and from WebSocket providers. */ package org.springframework.web.socket.adapter; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/ConvertingEncoderDecoderSupport.java b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/ConvertingEncoderDecoderSupport.java similarity index 99% rename from spring-websocket/src/main/java/org/springframework/web/socket/adapter/ConvertingEncoderDecoderSupport.java rename to spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/ConvertingEncoderDecoderSupport.java index a2c2b98e82f..45ccddfbfb3 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/ConvertingEncoderDecoderSupport.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/ConvertingEncoderDecoderSupport.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.adapter; +package org.springframework.web.socket.adapter.standard; import java.nio.ByteBuffer; import javax.websocket.DecodeException; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/StandardToWebSocketExtensionAdapter.java b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/StandardToWebSocketExtensionAdapter.java new file mode 100644 index 00000000000..5546916358e --- /dev/null +++ b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/StandardToWebSocketExtensionAdapter.java @@ -0,0 +1,36 @@ +/* + * Copyright 2002-2013 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.web.socket.adapter.standard; + +import javax.websocket.Extension; + +import org.springframework.web.socket.WebSocketExtension; + +/** + * @author Rossen Stoyanchev + * @since 4.0 + */ +public class StandardToWebSocketExtensionAdapter extends WebSocketExtension { + + public StandardToWebSocketExtensionAdapter(Extension ext) { + super(ext.getName()); + for (Extension.Parameter p : ext.getParameters()) { + super.getParameters().put(p.getName(), p.getValue()); + } + } + +} diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/StandardWebSocketHandlerAdapter.java b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/StandardWebSocketHandlerAdapter.java similarity index 97% rename from spring-websocket/src/main/java/org/springframework/web/socket/adapter/StandardWebSocketHandlerAdapter.java rename to spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/StandardWebSocketHandlerAdapter.java index 6cb6f8abe4a..31c5941d60b 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/StandardWebSocketHandlerAdapter.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/StandardWebSocketHandlerAdapter.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.adapter; +package org.springframework.web.socket.adapter.standard; import java.nio.ByteBuffer; @@ -31,7 +31,7 @@ import org.springframework.web.socket.CloseStatus; import org.springframework.web.socket.PongMessage; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketHandler; -import org.springframework.web.socket.support.ExceptionWebSocketHandlerDecorator; +import org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator; /** * Adapts a {@link WebSocketHandler} to the standard WebSocket for Java API. diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/StandardWebSocketSession.java b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/StandardWebSocketSession.java similarity index 93% rename from spring-websocket/src/main/java/org/springframework/web/socket/adapter/StandardWebSocketSession.java rename to spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/StandardWebSocketSession.java index 771aea2c7e5..e25bd2d4fe7 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/StandardWebSocketSession.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/StandardWebSocketSession.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.adapter; +package org.springframework.web.socket.adapter.standard; import java.io.IOException; import java.net.InetSocketAddress; @@ -27,6 +27,7 @@ import java.util.Map; import javax.websocket.CloseReason; import javax.websocket.CloseReason.CloseCodes; import javax.websocket.Extension; +import javax.websocket.Session; import org.springframework.http.HttpHeaders; import org.springframework.util.StringUtils; @@ -37,6 +38,7 @@ import org.springframework.web.socket.PongMessage; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.WebSocketExtension; +import org.springframework.web.socket.adapter.AbstractWebSocketSession; /** * A {@link WebSocketSession} for use with the standard WebSocket for Java API. @@ -44,7 +46,7 @@ import org.springframework.web.socket.WebSocketExtension; * @author Rossen Stoyanchev * @since 4.0 */ -public class StandardWebSocketSession extends AbstractWebSocketSesssion { +public class StandardWebSocketSession extends AbstractWebSocketSession { private final HttpHeaders handshakeHeaders; @@ -119,7 +121,7 @@ public class StandardWebSocketSession extends AbstractWebSocketSesssion source = getNativeSession().getNegotiatedExtensions(); this.extensions = new ArrayList(source.size()); for(Extension e : source) { - this.extensions.add(new WebSocketExtension.StandardToWebSocketExtensionAdapter(e)); + this.extensions.add(new StandardToWebSocketExtensionAdapter(e)); } } return this.extensions; @@ -127,7 +129,7 @@ public class StandardWebSocketSession extends AbstractWebSocketSesssion parameters = new ArrayList(); + + public WebSocketToStandardExtensionAdapter(final WebSocketExtension ext) { + this.name = ext.getName(); + for (final String paramName : ext.getParameters().keySet()) { + this.parameters.add(new Parameter() { + @Override + public String getName() { + return paramName; + } + @Override + public String getValue() { + return ext.getParameters().get(paramName); + } + }); + } + } + + @Override + public String getName() { + return this.name; + } + + @Override + public List getParameters() { + return this.parameters; + } + +} diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/package-info.java b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/package-info.java new file mode 100644 index 00000000000..81a1fcf8488 --- /dev/null +++ b/spring-websocket/src/main/java/org/springframework/web/socket/adapter/standard/package-info.java @@ -0,0 +1,21 @@ +/* + * Copyright 2002-2013 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Adapter classes for the standard Java WebSocket API. + */ +package org.springframework.web.socket.adapter.standard; + diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/client/AbstractWebSocketClient.java b/spring-websocket/src/main/java/org/springframework/web/socket/client/AbstractWebSocketClient.java index 546f6ecb29c..831ee1e47b6 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/client/AbstractWebSocketClient.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/client/AbstractWebSocketClient.java @@ -31,7 +31,7 @@ import org.springframework.util.concurrent.ListenableFuture; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.WebSocketSession; import org.springframework.web.socket.WebSocketExtension; -import org.springframework.web.socket.support.WebSocketHttpHeaders; +import org.springframework.web.socket.WebSocketHttpHeaders; import org.springframework.web.util.UriComponentsBuilder; /** diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/client/WebSocketClient.java b/spring-websocket/src/main/java/org/springframework/web/socket/client/WebSocketClient.java index 4b83bd259f0..beffb6c9056 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/client/WebSocketClient.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/client/WebSocketClient.java @@ -21,7 +21,7 @@ import java.net.URI; import org.springframework.util.concurrent.ListenableFuture; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.WebSocketSession; -import org.springframework.web.socket.support.WebSocketHttpHeaders; +import org.springframework.web.socket.WebSocketHttpHeaders; /** * Contract for initiating a WebSocket request. As an alternative considering using the diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/client/WebSocketConnectionManager.java b/spring-websocket/src/main/java/org/springframework/web/socket/client/WebSocketConnectionManager.java index c0ae96f8a68..85a90cb2ab9 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/client/WebSocketConnectionManager.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/client/WebSocketConnectionManager.java @@ -24,8 +24,8 @@ import org.springframework.util.concurrent.ListenableFuture; import org.springframework.util.concurrent.ListenableFutureCallback; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.WebSocketSession; -import org.springframework.web.socket.support.LoggingWebSocketHandlerDecorator; -import org.springframework.web.socket.support.WebSocketHttpHeaders; +import org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator; +import org.springframework.web.socket.WebSocketHttpHeaders; /** * A WebSocket connection manager that is given a URI, a {@link WebSocketClient}, and a diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/client/jetty/JettyWebSocketClient.java b/spring-websocket/src/main/java/org/springframework/web/socket/client/jetty/JettyWebSocketClient.java index c2f7e28f1b2..1e02a8ad5b9 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/client/jetty/JettyWebSocketClient.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/client/jetty/JettyWebSocketClient.java @@ -35,16 +35,17 @@ import org.springframework.util.Assert; import org.springframework.util.concurrent.ListenableFuture; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.WebSocketSession; -import org.springframework.web.socket.adapter.JettyWebSocketHandlerAdapter; -import org.springframework.web.socket.adapter.JettyWebSocketSession; +import org.springframework.web.socket.adapter.jetty.JettyWebSocketHandlerAdapter; +import org.springframework.web.socket.adapter.jetty.JettyWebSocketSession; +import org.springframework.web.socket.adapter.jetty.WebSocketToJettyExtensionConfigAdapter; import org.springframework.web.socket.client.AbstractWebSocketClient; import org.springframework.web.socket.WebSocketExtension; import org.springframework.web.util.UriComponents; import org.springframework.web.util.UriComponentsBuilder; /** - * Initiates WebSocket requests to a WebSocket server programatically through the Jetty - * WebSocket API. + * Initiates WebSocket requests to a WebSocket server programmatically + * through the Jetty WebSocket API. * * @author Rossen Stoyanchev * @since 4.0 @@ -177,7 +178,7 @@ public class JettyWebSocketClient extends AbstractWebSocketClient implements Sma request.setSubProtocols(protocols); for (WebSocketExtension e : extensions) { - request.addExtensions(new WebSocketExtension.WebSocketToJettyExtensionConfigAdapter(e)); + request.addExtensions(new WebSocketToJettyExtensionConfigAdapter(e)); } for (String header : headers.keySet()) { diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/client/jetty/package-info.java b/spring-websocket/src/main/java/org/springframework/web/socket/client/jetty/package-info.java new file mode 100644 index 00000000000..64361f34e9a --- /dev/null +++ b/spring-websocket/src/main/java/org/springframework/web/socket/client/jetty/package-info.java @@ -0,0 +1,21 @@ +/* + * Copyright 2002-2013 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Client-side support for the Jetty WebSocket API. + */ +package org.springframework.web.socket.client.jetty; + diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/client/endpoint/AnnotatedEndpointConnectionManager.java b/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/AnnotatedEndpointConnectionManager.java similarity index 97% rename from spring-websocket/src/main/java/org/springframework/web/socket/client/endpoint/AnnotatedEndpointConnectionManager.java rename to spring-websocket/src/main/java/org/springframework/web/socket/client/standard/AnnotatedEndpointConnectionManager.java index b2fe7cad86f..0b4349f39e4 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/client/endpoint/AnnotatedEndpointConnectionManager.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/AnnotatedEndpointConnectionManager.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.client.endpoint; +package org.springframework.web.socket.client.standard; import javax.websocket.ContainerProvider; import javax.websocket.Session; @@ -28,7 +28,7 @@ import org.springframework.core.task.SimpleAsyncTaskExecutor; import org.springframework.core.task.TaskExecutor; import org.springframework.util.Assert; import org.springframework.web.socket.client.ConnectionManagerSupport; -import org.springframework.web.socket.support.BeanCreatingHandlerProvider; +import org.springframework.web.socket.handler.BeanCreatingHandlerProvider; /** * A WebSocket connection manager that is given a URI, a {@link ServerEndpoint}-annotated diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/client/endpoint/EndpointConnectionManager.java b/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/EndpointConnectionManager.java similarity index 97% rename from spring-websocket/src/main/java/org/springframework/web/socket/client/endpoint/EndpointConnectionManager.java rename to spring-websocket/src/main/java/org/springframework/web/socket/client/standard/EndpointConnectionManager.java index ecdb198d3f0..88da2a7f30b 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/client/endpoint/EndpointConnectionManager.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/EndpointConnectionManager.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.client.endpoint; +package org.springframework.web.socket.client.standard; import java.util.Arrays; import java.util.List; @@ -36,7 +36,7 @@ import org.springframework.core.task.SimpleAsyncTaskExecutor; import org.springframework.core.task.TaskExecutor; import org.springframework.util.Assert; import org.springframework.web.socket.client.ConnectionManagerSupport; -import org.springframework.web.socket.support.BeanCreatingHandlerProvider; +import org.springframework.web.socket.handler.BeanCreatingHandlerProvider; /** * A WebSocket connection manager that is given a URI, an {@link Endpoint}, connects to a diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/client/endpoint/StandardWebSocketClient.java b/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/StandardWebSocketClient.java similarity index 93% rename from spring-websocket/src/main/java/org/springframework/web/socket/client/endpoint/StandardWebSocketClient.java rename to spring-websocket/src/main/java/org/springframework/web/socket/client/standard/StandardWebSocketClient.java index 78173064cf2..6a1b8a37028 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/client/endpoint/StandardWebSocketClient.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/StandardWebSocketClient.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.client.endpoint; +package org.springframework.web.socket.client.standard; import java.net.InetAddress; import java.net.InetSocketAddress; @@ -37,8 +37,9 @@ import org.springframework.util.Assert; import org.springframework.util.concurrent.ListenableFuture; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.WebSocketSession; -import org.springframework.web.socket.adapter.StandardWebSocketHandlerAdapter; -import org.springframework.web.socket.adapter.StandardWebSocketSession; +import org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter; +import org.springframework.web.socket.adapter.standard.StandardWebSocketSession; +import org.springframework.web.socket.adapter.standard.WebSocketToStandardExtensionAdapter; import org.springframework.web.socket.client.AbstractWebSocketClient; import org.springframework.web.socket.WebSocketExtension; @@ -123,7 +124,7 @@ public class StandardWebSocketClient extends AbstractWebSocketClient { private static List adaptExtensions(List extensions) { List result = new ArrayList(); for (WebSocketExtension e : extensions) { - result.add(new WebSocketExtension.WebSocketToStandardExtensionAdapter(e)); + result.add(new WebSocketToStandardExtensionAdapter(e)); } return result; } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/client/endpoint/WebSocketContainerFactoryBean.java b/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/WebSocketContainerFactoryBean.java similarity index 97% rename from spring-websocket/src/main/java/org/springframework/web/socket/client/endpoint/WebSocketContainerFactoryBean.java rename to spring-websocket/src/main/java/org/springframework/web/socket/client/standard/WebSocketContainerFactoryBean.java index 10dd2c71df0..dab109fdb58 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/client/endpoint/WebSocketContainerFactoryBean.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/WebSocketContainerFactoryBean.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.client.endpoint; +package org.springframework.web.socket.client.standard; import javax.websocket.ContainerProvider; import javax.websocket.WebSocketContainer; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/client/endpoint/package-info.java b/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/package-info.java similarity index 92% rename from spring-websocket/src/main/java/org/springframework/web/socket/client/endpoint/package-info.java rename to spring-websocket/src/main/java/org/springframework/web/socket/client/standard/package-info.java index eef1ecff584..abe0c4509c4 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/client/endpoint/package-info.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/client/standard/package-info.java @@ -17,5 +17,5 @@ /** * Client-side classes for use with standard Java WebSocket endpoints. */ -package org.springframework.web.socket.client.endpoint; +package org.springframework.web.socket.client.standard; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/config/annotation/WebMvcStompEndpointRegistry.java b/spring-websocket/src/main/java/org/springframework/web/socket/config/annotation/WebMvcStompEndpointRegistry.java index a1f76751b58..289966cd89d 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/config/annotation/WebMvcStompEndpointRegistry.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/config/annotation/WebMvcStompEndpointRegistry.java @@ -31,7 +31,7 @@ import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.messaging.StompSubProtocolHandler; import org.springframework.web.socket.messaging.SubProtocolWebSocketHandler; -import org.springframework.web.socket.support.WebSocketHandlerDecorator; +import org.springframework.web.socket.handler.WebSocketHandlerDecorator; /** * A registry for STOMP over WebSocket endpoints that maps the endpoints with a diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/WebSocketHandlerAdapter.java b/spring-websocket/src/main/java/org/springframework/web/socket/handler/AbstractWebSocketHandler.java similarity index 95% rename from spring-websocket/src/main/java/org/springframework/web/socket/adapter/WebSocketHandlerAdapter.java rename to spring-websocket/src/main/java/org/springframework/web/socket/handler/AbstractWebSocketHandler.java index f046588fc7b..fd35fd907ec 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/WebSocketHandlerAdapter.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/handler/AbstractWebSocketHandler.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.adapter; +package org.springframework.web.socket.handler; import org.springframework.web.socket.BinaryMessage; import org.springframework.web.socket.CloseStatus; @@ -31,8 +31,7 @@ import org.springframework.web.socket.WebSocketSession; * @author Phillip Webb * @since 4.0 */ -public class WebSocketHandlerAdapter implements WebSocketHandler { - +public abstract class AbstractWebSocketHandler implements WebSocketHandler { @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/support/BeanCreatingHandlerProvider.java b/spring-websocket/src/main/java/org/springframework/web/socket/handler/BeanCreatingHandlerProvider.java similarity index 98% rename from spring-websocket/src/main/java/org/springframework/web/socket/support/BeanCreatingHandlerProvider.java rename to spring-websocket/src/main/java/org/springframework/web/socket/handler/BeanCreatingHandlerProvider.java index 4e481444a9a..36ccc029aeb 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/support/BeanCreatingHandlerProvider.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/handler/BeanCreatingHandlerProvider.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.support; +package org.springframework.web.socket.handler; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/BinaryWebSocketHandlerAdapter.java b/spring-websocket/src/main/java/org/springframework/web/socket/handler/BinaryWebSocketHandler.java similarity index 91% rename from spring-websocket/src/main/java/org/springframework/web/socket/adapter/BinaryWebSocketHandlerAdapter.java rename to spring-websocket/src/main/java/org/springframework/web/socket/handler/BinaryWebSocketHandler.java index efec63ce1d3..880e0754540 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/BinaryWebSocketHandlerAdapter.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/handler/BinaryWebSocketHandler.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.adapter; +package org.springframework.web.socket.handler; import java.io.IOException; @@ -32,7 +32,7 @@ import org.springframework.web.socket.WebSocketSession; * @author Phillip Webb * @since 4.0 */ -public class BinaryWebSocketHandlerAdapter extends WebSocketHandlerAdapter { +public class BinaryWebSocketHandler extends AbstractWebSocketHandler { @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) { diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/support/ExceptionWebSocketHandlerDecorator.java b/spring-websocket/src/main/java/org/springframework/web/socket/handler/ExceptionWebSocketHandlerDecorator.java similarity index 98% rename from spring-websocket/src/main/java/org/springframework/web/socket/support/ExceptionWebSocketHandlerDecorator.java rename to spring-websocket/src/main/java/org/springframework/web/socket/handler/ExceptionWebSocketHandlerDecorator.java index 82d450459f2..2b1345ff58f 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/support/ExceptionWebSocketHandlerDecorator.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/handler/ExceptionWebSocketHandlerDecorator.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.support; +package org.springframework.web.socket.handler; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/support/LoggingWebSocketHandlerDecorator.java b/spring-websocket/src/main/java/org/springframework/web/socket/handler/LoggingWebSocketHandlerDecorator.java similarity index 98% rename from spring-websocket/src/main/java/org/springframework/web/socket/support/LoggingWebSocketHandlerDecorator.java rename to spring-websocket/src/main/java/org/springframework/web/socket/handler/LoggingWebSocketHandlerDecorator.java index e12641ecd56..1500f445018 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/support/LoggingWebSocketHandlerDecorator.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/handler/LoggingWebSocketHandlerDecorator.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.support; +package org.springframework.web.socket.handler; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/support/PerConnectionWebSocketHandler.java b/spring-websocket/src/main/java/org/springframework/web/socket/handler/PerConnectionWebSocketHandler.java similarity index 98% rename from spring-websocket/src/main/java/org/springframework/web/socket/support/PerConnectionWebSocketHandler.java rename to spring-websocket/src/main/java/org/springframework/web/socket/handler/PerConnectionWebSocketHandler.java index 74e34e6bad9..86d1a6c2888 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/support/PerConnectionWebSocketHandler.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/handler/PerConnectionWebSocketHandler.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.support; +package org.springframework.web.socket.handler; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/TextWebSocketHandlerAdapter.java b/spring-websocket/src/main/java/org/springframework/web/socket/handler/TextWebSocketHandler.java similarity index 92% rename from spring-websocket/src/main/java/org/springframework/web/socket/adapter/TextWebSocketHandlerAdapter.java rename to spring-websocket/src/main/java/org/springframework/web/socket/handler/TextWebSocketHandler.java index 96f4420f18d..4001c122019 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/adapter/TextWebSocketHandlerAdapter.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/handler/TextWebSocketHandler.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.adapter; +package org.springframework.web.socket.handler; import java.io.IOException; @@ -32,7 +32,7 @@ import org.springframework.web.socket.WebSocketSession; * @author Phillip Webb * @since 4.0 */ -public class TextWebSocketHandlerAdapter extends WebSocketHandlerAdapter { +public class TextWebSocketHandler extends AbstractWebSocketHandler { @Override protected void handleBinaryMessage(WebSocketSession session, BinaryMessage message) { diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/support/WebSocketHandlerDecorator.java b/spring-websocket/src/main/java/org/springframework/web/socket/handler/WebSocketHandlerDecorator.java similarity index 95% rename from spring-websocket/src/main/java/org/springframework/web/socket/support/WebSocketHandlerDecorator.java rename to spring-websocket/src/main/java/org/springframework/web/socket/handler/WebSocketHandlerDecorator.java index f4612700e66..bf13a8dbf4a 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/support/WebSocketHandlerDecorator.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/handler/WebSocketHandlerDecorator.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.support; +package org.springframework.web.socket.handler; import org.springframework.util.Assert; import org.springframework.web.socket.CloseStatus; @@ -32,7 +32,7 @@ public class WebSocketHandlerDecorator implements WebSocketHandler { public WebSocketHandlerDecorator(WebSocketHandler delegate) { - Assert.notNull(delegate, "delegate must not be null"); + Assert.notNull(delegate, "Delegate must not be null"); this.delegate = delegate; } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/support/package-info.java b/spring-websocket/src/main/java/org/springframework/web/socket/handler/package-info.java similarity index 66% rename from spring-websocket/src/main/java/org/springframework/web/socket/support/package-info.java rename to spring-websocket/src/main/java/org/springframework/web/socket/handler/package-info.java index 900e36206e9..1eb223dead1 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/support/package-info.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/handler/package-info.java @@ -15,10 +15,8 @@ */ /** - * WebSocket-related classes used by client and server code such as - * a {@link org.springframework.web.socket.support.WebSocketHandlerDecorator} - * and sub-class implementations, as well as a - * {@link org.springframework.web.socket.support.PerConnectionWebSocketHandler}. + * Convenient {@link org.springframework.web.socket.WebSocketHandler} + * implementations and decorators. */ -package org.springframework.web.socket.support; +package org.springframework.web.socket.handler; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandler.java b/spring-websocket/src/main/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandler.java index d23005c6ff9..3b1fad82711 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandler.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandler.java @@ -16,21 +16,32 @@ package org.springframework.web.socket.messaging; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; import java.util.concurrent.ConcurrentHashMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; + import org.springframework.context.SmartLifecycle; -import org.springframework.messaging.*; +import org.springframework.messaging.Message; +import org.springframework.messaging.MessageChannel; +import org.springframework.messaging.MessageHandler; +import org.springframework.messaging.MessagingException; +import org.springframework.messaging.SubscribableChannel; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; import org.springframework.web.socket.CloseStatus; +import org.springframework.web.socket.SubProtocolCapable; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.WebSocketMessage; import org.springframework.web.socket.WebSocketSession; -import org.springframework.web.socket.support.SubProtocolCapable; /** * An implementation of {@link WebSocketHandler} that delegates incoming WebSocket @@ -45,11 +56,10 @@ import org.springframework.web.socket.support.SubProtocolCapable; * * @author Rossen Stoyanchev * @author Andy Wilkinson - * * @since 4.0 */ public class SubProtocolWebSocketHandler - implements SubProtocolCapable, WebSocketHandler, MessageHandler, SmartLifecycle { + implements WebSocketHandler, SubProtocolCapable, MessageHandler, SmartLifecycle { private final Log logger = LogFactory.getLog(SubProtocolWebSocketHandler.class); diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/HandshakeHandler.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/HandshakeHandler.java index 87aad9dd811..ecc4ac3d300 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/HandshakeHandler.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/HandshakeHandler.java @@ -21,7 +21,7 @@ import java.util.Map; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.socket.WebSocketHandler; -import org.springframework.web.socket.support.PerConnectionWebSocketHandler; +import org.springframework.web.socket.handler.PerConnectionWebSocketHandler; /** * Contract for processing a WebSocket handshake request. diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/JettyRequestUpgradeStrategy.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/jetty/JettyRequestUpgradeStrategy.java similarity index 91% rename from spring-websocket/src/main/java/org/springframework/web/socket/server/support/JettyRequestUpgradeStrategy.java rename to spring-websocket/src/main/java/org/springframework/web/socket/server/jetty/JettyRequestUpgradeStrategy.java index b92889f3399..12ed94c426a 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/JettyRequestUpgradeStrategy.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/jetty/JettyRequestUpgradeStrategy.java @@ -14,13 +14,12 @@ * limitations under the License. */ -package org.springframework.web.socket.server.support; +package org.springframework.web.socket.server.jetty; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; - import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -33,6 +32,7 @@ import org.eclipse.jetty.websocket.server.WebSocketServerFactory; import org.eclipse.jetty.websocket.servlet.ServletUpgradeRequest; import org.eclipse.jetty.websocket.servlet.ServletUpgradeResponse; import org.eclipse.jetty.websocket.servlet.WebSocketCreator; + import org.springframework.core.NamedThreadLocal; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; @@ -42,8 +42,9 @@ import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; import org.springframework.web.socket.WebSocketExtension; import org.springframework.web.socket.WebSocketHandler; -import org.springframework.web.socket.adapter.JettyWebSocketHandlerAdapter; -import org.springframework.web.socket.adapter.JettyWebSocketSession; +import org.springframework.web.socket.adapter.jetty.JettyWebSocketHandlerAdapter; +import org.springframework.web.socket.adapter.jetty.JettyWebSocketSession; +import org.springframework.web.socket.adapter.jetty.WebSocketToJettyExtensionConfigAdapter; import org.springframework.web.socket.server.HandshakeFailureException; import org.springframework.web.socket.server.RequestUpgradeStrategy; @@ -83,22 +84,17 @@ public class JettyRequestUpgradeStrategy implements RequestUpgradeStrategy { Assert.notNull(factory, "WebSocketServerFactory must not be null"); this.factory = factory; this.factory.setCreator(new WebSocketCreator() { - @Override public Object createWebSocket(ServletUpgradeRequest request, ServletUpgradeResponse response) { // Cast to avoid infinite recursion return createWebSocket((UpgradeRequest) request, (UpgradeResponse) response); } - // For Jetty 9.0.x public Object createWebSocket(UpgradeRequest request, UpgradeResponse response) { - WebSocketHandlerContainer container = wsContainerHolder.get(); Assert.state(container != null, "Expected WebSocketHandlerContainer"); - response.setAcceptedSubProtocol(container.getSelectedProtocol()); response.setExtensions(container.getExtensionConfigs()); - return container.getHandler(); } }); @@ -173,33 +169,31 @@ public class JettyRequestUpgradeStrategy implements RequestUpgradeStrategy { private final List extensionConfigs; - private WebSocketHandlerContainer(JettyWebSocketHandlerAdapter handler, String protocol, - List extensions) { - + public WebSocketHandlerContainer(JettyWebSocketHandlerAdapter handler, String protocol, List extensions) { this.handler = handler; this.selectedProtocol = protocol; - if (CollectionUtils.isEmpty(extensions)) { this.extensionConfigs = null; } else { this.extensionConfigs = new ArrayList(); for (WebSocketExtension e : extensions) { - this.extensionConfigs.add(new WebSocketExtension.WebSocketToJettyExtensionConfigAdapter(e)); + this.extensionConfigs.add(new WebSocketToJettyExtensionConfigAdapter(e)); } } } - private JettyWebSocketHandlerAdapter getHandler() { + public JettyWebSocketHandlerAdapter getHandler() { return this.handler; } - private String getSelectedProtocol() { + public String getSelectedProtocol() { return this.selectedProtocol; } - private List getExtensionConfigs() { + public List getExtensionConfigs() { return this.extensionConfigs; } } + } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/jetty/package-info.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/jetty/package-info.java new file mode 100644 index 00000000000..892998ce30a --- /dev/null +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/jetty/package-info.java @@ -0,0 +1,21 @@ +/* + * Copyright 2002-2013 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Server-side support for the Jetty WebSocket API. + */ +package org.springframework.web.socket.server.jetty; + diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/AbstractStandardUpgradeStrategy.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/AbstractStandardUpgradeStrategy.java similarity index 85% rename from spring-websocket/src/main/java/org/springframework/web/socket/server/support/AbstractStandardUpgradeStrategy.java rename to spring-websocket/src/main/java/org/springframework/web/socket/server/standard/AbstractStandardUpgradeStrategy.java index b8952cc1bf5..c7f10ddaeef 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/AbstractStandardUpgradeStrategy.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/AbstractStandardUpgradeStrategy.java @@ -14,11 +14,12 @@ * limitations under the License. */ -package org.springframework.web.socket.server.support; +package org.springframework.web.socket.server.standard; import java.net.InetSocketAddress; -import java.util.*; - +import java.util.ArrayList; +import java.util.List; +import java.util.Map; import javax.servlet.ServletContext; import javax.servlet.http.HttpServletRequest; import javax.websocket.Endpoint; @@ -28,6 +29,7 @@ import javax.websocket.server.ServerContainer; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; + import org.springframework.http.HttpHeaders; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; @@ -35,8 +37,10 @@ import org.springframework.http.server.ServletServerHttpRequest; import org.springframework.util.Assert; import org.springframework.web.socket.WebSocketExtension; import org.springframework.web.socket.WebSocketHandler; -import org.springframework.web.socket.adapter.StandardWebSocketHandlerAdapter; -import org.springframework.web.socket.adapter.StandardWebSocketSession; +import org.springframework.web.socket.adapter.standard.StandardToWebSocketExtensionAdapter; +import org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter; +import org.springframework.web.socket.adapter.standard.StandardWebSocketSession; +import org.springframework.web.socket.adapter.standard.WebSocketToStandardExtensionAdapter; import org.springframework.web.socket.server.HandshakeFailureException; import org.springframework.web.socket.server.RequestUpgradeStrategy; @@ -74,8 +78,8 @@ public abstract class AbstractStandardUpgradeStrategy implements RequestUpgradeS protected List getInstalledExtensions(WebSocketContainer container) { List result = new ArrayList(); - for(Extension e : container.getInstalledExtensions()) { - result.add(new WebSocketExtension.StandardToWebSocketExtensionAdapter(e)); + for (Extension ext : container.getInstalledExtensions()) { + result.add(new StandardToWebSocketExtensionAdapter(ext)); } return result; } @@ -95,7 +99,7 @@ public abstract class AbstractStandardUpgradeStrategy implements RequestUpgradeS List extensions = new ArrayList(); for (WebSocketExtension e : selectedExtensions) { - extensions.add(new WebSocketExtension.WebSocketToStandardExtensionAdapter(e)); + extensions.add(new WebSocketToStandardExtensionAdapter(e)); } upgradeInternal(request, response, selectedProtocol, extensions, endpoint); diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/AbstractGlassFishRequestUpgradeStrategy.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/GlassFishRequestUpgradeStrategy.java similarity index 64% rename from spring-websocket/src/main/java/org/springframework/web/socket/server/support/AbstractGlassFishRequestUpgradeStrategy.java rename to spring-websocket/src/main/java/org/springframework/web/socket/server/standard/GlassFishRequestUpgradeStrategy.java index f48e508d396..4d0c6280527 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/AbstractGlassFishRequestUpgradeStrategy.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/GlassFishRequestUpgradeStrategy.java @@ -14,63 +14,107 @@ * limitations under the License. */ -package org.springframework.web.socket.server.support; +package org.springframework.web.socket.server.standard; import java.io.IOException; import java.lang.reflect.Constructor; import java.net.URI; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Random; - import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.websocket.DeploymentException; import javax.websocket.Endpoint; import javax.websocket.Extension; +import javax.websocket.WebSocketContainer; import org.glassfish.tyrus.core.ComponentProviderService; import org.glassfish.tyrus.core.EndpointWrapper; import org.glassfish.tyrus.core.ErrorCollector; import org.glassfish.tyrus.core.RequestContext; import org.glassfish.tyrus.servlet.TyrusHttpUpgradeHandler; +import org.glassfish.tyrus.spi.SPIEndpoint; import org.glassfish.tyrus.websockets.Connection; import org.glassfish.tyrus.websockets.Version; import org.glassfish.tyrus.websockets.WebSocketApplication; import org.glassfish.tyrus.websockets.WebSocketEngine; -import org.glassfish.tyrus.websockets.WebSocketEngine.WebSocketHolderListener; + import org.springframework.http.HttpHeaders; 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.util.Assert; -import org.springframework.util.ClassUtils; import org.springframework.util.ReflectionUtils; import org.springframework.util.StringUtils; +import org.springframework.web.socket.WebSocketExtension; import org.springframework.web.socket.server.HandshakeFailureException; /** - * GlassFish support for upgrading a request during a WebSocket handshake. To modify - * properties of the underlying {@link javax.websocket.server.ServerContainer} you can use - * {@link ServletServerContainerFactoryBean} in XML configuration or if using Java - * configuration, access the container instance through the - * "javax.websocket.server.ServerContainer" ServletContext attribute. + * {@code RequestUpgradeStrategy} that provides support for GlassFish 4 and beyond. * * @author Rossen Stoyanchev + * @author Juergen Hoeller + * @author Michael Irwin * @since 4.0 */ -public abstract class AbstractGlassFishRequestUpgradeStrategy extends AbstractStandardUpgradeStrategy { +public class GlassFishRequestUpgradeStrategy extends AbstractStandardUpgradeStrategy { private final static Random random = new Random(); + private static final Constructor tyrusConnectionConstructor; + + private static final Constructor tyrusEndpointConstructor; + + + static { + ClassLoader cl = GlassFishRequestUpgradeStrategy.class.getClassLoader(); + try { + // Tyrus ConnectionImpl is package-visible only + Class tyrusConnectionClass = cl.loadClass("org.glassfish.tyrus.servlet.ConnectionImpl"); + tyrusConnectionConstructor = tyrusConnectionClass.getDeclaredConstructor( + TyrusHttpUpgradeHandler.class, HttpServletResponse.class); + ReflectionUtils.makeAccessible(tyrusConnectionConstructor); + + // TyrusEndpoint package location differs between GlassFish 4.0.0 and 4.0.1 + Class tyrusEndpointClass; + try { + tyrusEndpointClass = cl.loadClass("org.glassfish.tyrus.core.TyrusEndpoint"); + } + catch (ClassNotFoundException ex) { + try { + tyrusEndpointClass = cl.loadClass("org.glassfish.tyrus.server.TyrusEndpoint"); + } + catch (ClassNotFoundException ex2) { + // Propagate original exception for newer version of the class + throw ex; + } + } + tyrusEndpointConstructor = tyrusEndpointClass.getConstructor(SPIEndpoint.class); + } + catch (Exception ex) { + throw new IllegalStateException("No compatible Tyrus version found", ex); + } + } + @Override public String[] getSupportedVersions() { return StringUtils.commaDelimitedListToStringArray(Version.getSupportedWireProtocolVersions()); } + protected List getInstalledExtensions(WebSocketContainer container) { + try { + return super.getInstalledExtensions(container); + } + catch (UnsupportedOperationException e) { + return new ArrayList(); + } + } + @Override public void upgradeInternal(ServerHttpRequest request, ServerHttpResponse response, String selectedProtocol, List selectedExtensions, @@ -113,21 +157,21 @@ public abstract class AbstractGlassFishRequestUpgradeStrategy extends AbstractSt try { upgradeHandler = request.upgrade(TyrusHttpUpgradeHandler.class); } - catch (ServletException e) { - throw new HandshakeFailureException("Unable to create UpgardeHandler", e); + catch (ServletException ex) { + throw new HandshakeFailureException("Unable to create UpgradeHandler", ex); } Connection connection = createConnection(upgradeHandler, response); - RequestContext wsRequest = RequestContext.Builder.create() - .requestURI(URI.create(wsApp.getPath())).requestPath(wsApp.getPath()) - .connection(connection).secure(request.isSecure()).build(); + RequestContext wsRequest = RequestContext.Builder.create(). + requestURI(URI.create(wsApp.getPath())).requestPath(wsApp.getPath()). + connection(connection).secure(request.isSecure()).build(); for (String header : headers.keySet()) { wsRequest.getHeaders().put(header, headers.get(header)); } - return WebSocketEngine.getEngine().upgrade(connection, wsRequest, new WebSocketHolderListener() { + return WebSocketEngine.getEngine().upgrade(connection, wsRequest, new WebSocketEngine.WebSocketHolderListener() { @Override public void onWebSocketHolder(WebSocketEngine.WebSocketHolder webSocketHolder) { upgradeHandler.setWebSocketHolder(webSocketHolder); @@ -138,7 +182,7 @@ public abstract class AbstractGlassFishRequestUpgradeStrategy extends AbstractSt private WebSocketApplication createTyrusEndpoint(HttpServletRequest request, Endpoint endpoint, String selectedProtocol, List selectedExtensions) { - // shouldn't matter for processing but must be unique + // Shouldn't matter for processing but must be unique String endpointPath = "/" + random.nextLong(); ServerEndpointRegistration endpointConfig = new ServerEndpointRegistration(endpointPath, endpoint); endpointConfig.setSubprotocols(Arrays.asList(selectedProtocol)); @@ -148,23 +192,21 @@ public abstract class AbstractGlassFishRequestUpgradeStrategy extends AbstractSt endpointConfig.getConfigurator())); } - /** - * Create the actual TyrusEndpoint - * @param endpoint The WebSocket endpoint - * @return The configured WebSocketApplication, most likely {@code TyrusEndpoint} - */ - abstract protected WebSocketApplication createTyrusEndpoint(EndpointWrapper endpoint); - private Connection createConnection(TyrusHttpUpgradeHandler handler, HttpServletResponse response) { try { - String name = "org.glassfish.tyrus.servlet.ConnectionImpl"; - Class clazz = ClassUtils.forName(name, GlassFishRequestUpgradeStrategy.class.getClassLoader()); - Constructor constructor = clazz.getDeclaredConstructor(TyrusHttpUpgradeHandler.class, HttpServletResponse.class); - ReflectionUtils.makeAccessible(constructor); - return (Connection) constructor.newInstance(handler, response); + return (Connection) tyrusConnectionConstructor.newInstance(handler, response); + } + catch (Exception ex) { + throw new IllegalStateException("Failed to create GlassFish connection", ex); + } + } + + protected WebSocketApplication createTyrusEndpoint(EndpointWrapper endpoint) { + try { + return (WebSocketApplication) tyrusEndpointConstructor.newInstance(endpoint); } catch (Exception ex) { - throw new IllegalStateException("Failed to instantiate GlassFish connection", ex); + throw new IllegalStateException("Failed to create GlassFish endpoint", ex); } } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/ServerEndpointExporter.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/ServerEndpointExporter.java similarity index 99% rename from spring-websocket/src/main/java/org/springframework/web/socket/server/support/ServerEndpointExporter.java rename to spring-websocket/src/main/java/org/springframework/web/socket/server/standard/ServerEndpointExporter.java index fb3b926c497..3171f1f6ce4 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/ServerEndpointExporter.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/ServerEndpointExporter.java @@ -14,14 +14,13 @@ * limitations under the License. */ -package org.springframework.web.socket.server.support; +package org.springframework.web.socket.server.standard; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; - import javax.websocket.DeploymentException; import javax.websocket.server.ServerContainer; import javax.websocket.server.ServerEndpoint; @@ -29,6 +28,7 @@ import javax.websocket.server.ServerEndpointConfig; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; + import org.springframework.beans.BeansException; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.config.BeanPostProcessor; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/ServerEndpointRegistration.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/ServerEndpointRegistration.java similarity index 98% rename from spring-websocket/src/main/java/org/springframework/web/socket/server/support/ServerEndpointRegistration.java rename to spring-websocket/src/main/java/org/springframework/web/socket/server/standard/ServerEndpointRegistration.java index 24da19b28c6..bf8da81ff48 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/ServerEndpointRegistration.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/ServerEndpointRegistration.java @@ -14,13 +14,12 @@ * limitations under the License. */ -package org.springframework.web.socket.server.support; +package org.springframework.web.socket.server.standard; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; - import javax.websocket.Decoder; import javax.websocket.Encoder; import javax.websocket.Endpoint; @@ -33,7 +32,7 @@ import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.util.Assert; -import org.springframework.web.socket.support.BeanCreatingHandlerProvider; +import org.springframework.web.socket.handler.BeanCreatingHandlerProvider; /** * An implementation of {@link javax.websocket.server.ServerEndpointConfig} for use in diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/ServletServerContainerFactoryBean.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/ServletServerContainerFactoryBean.java similarity index 95% rename from spring-websocket/src/main/java/org/springframework/web/socket/server/support/ServletServerContainerFactoryBean.java rename to spring-websocket/src/main/java/org/springframework/web/socket/server/standard/ServletServerContainerFactoryBean.java index a6c99c1823c..eb4580c94fc 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/ServletServerContainerFactoryBean.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/ServletServerContainerFactoryBean.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.server.support; +package org.springframework.web.socket.server.standard; import javax.servlet.ServletContext; import javax.websocket.WebSocketContainer; @@ -33,7 +33,7 @@ import org.springframework.web.context.ServletContextAware; * configuration. * *

This is useful even if the {@code ServerContainer} is not injected into any other - * bean. For example, an application can configure a {@link DefaultHandshakeHandler}, a + * bean. For example, an application can configure a {@link org.springframework.web.socket.server.support.DefaultHandshakeHandler}, a * {@link org.springframework.web.socket.sockjs.SockJsService}, or {@link ServerEndpointExporter}, * and separately declare this FactoryBean in order to customize the properties of the * (one and only) {@code ServerContainer} instance. diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/SpringConfigurator.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/SpringConfigurator.java similarity index 98% rename from spring-websocket/src/main/java/org/springframework/web/socket/server/support/SpringConfigurator.java rename to spring-websocket/src/main/java/org/springframework/web/socket/server/standard/SpringConfigurator.java index 202833f3148..9ee7cb77487 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/SpringConfigurator.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/SpringConfigurator.java @@ -14,16 +14,16 @@ * limitations under the License. */ -package org.springframework.web.socket.server.support; +package org.springframework.web.socket.server.standard; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; - import javax.websocket.server.ServerEndpoint; import javax.websocket.server.ServerEndpointConfig.Configurator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; + import org.springframework.core.annotation.AnnotationUtils; import org.springframework.stereotype.Component; import org.springframework.util.ClassUtils; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/TomcatRequestUpgradeStrategy.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/TomcatRequestUpgradeStrategy.java similarity index 98% rename from spring-websocket/src/main/java/org/springframework/web/socket/server/support/TomcatRequestUpgradeStrategy.java rename to spring-websocket/src/main/java/org/springframework/web/socket/server/standard/TomcatRequestUpgradeStrategy.java index 5af90542ba1..157079e79f9 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/TomcatRequestUpgradeStrategy.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/TomcatRequestUpgradeStrategy.java @@ -14,14 +14,13 @@ * limitations under the License. */ -package org.springframework.web.socket.server.support; +package org.springframework.web.socket.server.standard; import java.io.IOException; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; - import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -29,6 +28,7 @@ import javax.websocket.Endpoint; import javax.websocket.Extension; import org.apache.tomcat.websocket.server.WsServerContainer; + import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.http.server.ServletServerHttpRequest; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/package-info.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/package-info.java new file mode 100644 index 00000000000..a015a6eaa4f --- /dev/null +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/package-info.java @@ -0,0 +1,21 @@ +/* + * Copyright 2002-2013 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * 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 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Server-side classes for use with standard Java WebSocket endpoints. + */ +package org.springframework.web.socket.server.standard; + diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/DefaultHandshakeHandler.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/support/DefaultHandshakeHandler.java index dc1ff0575d7..d8fd5c8f82c 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/DefaultHandshakeHandler.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/support/DefaultHandshakeHandler.java @@ -33,26 +33,26 @@ import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.util.ClassUtils; import org.springframework.util.StringUtils; +import org.springframework.web.socket.SubProtocolCapable; +import org.springframework.web.socket.WebSocketExtension; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.server.HandshakeFailureException; import org.springframework.web.socket.server.HandshakeHandler; import org.springframework.web.socket.server.RequestUpgradeStrategy; -import org.springframework.web.socket.support.SubProtocolCapable; -import org.springframework.web.socket.WebSocketExtension; -import org.springframework.web.socket.support.WebSocketHandlerDecorator; -import org.springframework.web.socket.support.WebSocketHttpHeaders; +import org.springframework.web.socket.handler.WebSocketHandlerDecorator; +import org.springframework.web.socket.WebSocketHttpHeaders; /** - * A default {@link org.springframework.web.socket.server.HandshakeHandler} implementation. Performs initial validation of the - * WebSocket handshake request -- possibly rejecting it through the appropriate HTTP - * status code -- while also allowing sub-classes to override various parts of the - * negotiation process (e.g. origin validation, sub-protocol negotiation, + * A default {@link org.springframework.web.socket.server.HandshakeHandler} implementation. + * Performs initial validation of the WebSocket handshake request -- possibly rejecting it + * through the appropriate HTTP status code -- while also allowing sub-classes to override + * various parts of the negotiation process (e.g. origin validation, sub-protocol negotiation, * extensions negotiation, etc). * *

If the negotiation succeeds, the actual upgrade is delegated to a server-specific - * {@link org.springframework.web.socket.server.RequestUpgradeStrategy}, which will update the response as necessary and - * initialize the WebSocket. Currently supported servers are Tomcat 7 and 8, Jetty 9, and - * Glassfish 4. + * {@link org.springframework.web.socket.server.RequestUpgradeStrategy}, which will update + * the response as necessary and initialize the WebSocket. Currently supported servers are + * Tomcat 7 and 8, Jetty 9, and GlassFish 4. * * @author Rossen Stoyanchev * @since 4.0 @@ -61,17 +61,14 @@ public class DefaultHandshakeHandler implements HandshakeHandler { protected Log logger = LogFactory.getLog(getClass()); - private static final boolean tomcatWsPresent = ClassUtils.isPresent( - "org.apache.tomcat.websocket.server.WsHttpUpgradeHandler", HandshakeHandler.class.getClassLoader()); - private static final boolean jettyWsPresent = ClassUtils.isPresent( - "org.eclipse.jetty.websocket.server.WebSocketServerFactory", HandshakeHandler.class.getClassLoader()); + "org.eclipse.jetty.websocket.server.WebSocketServerFactory", DefaultHandshakeHandler.class.getClassLoader()); - private static final boolean glassFishWsPresent = ClassUtils.isPresent( - "org.glassfish.tyrus.servlet.TyrusHttpUpgradeHandler", HandshakeHandler.class.getClassLoader()); + private static final boolean tomcatWsPresent = ClassUtils.isPresent( + "org.apache.tomcat.websocket.server.WsHttpUpgradeHandler", DefaultHandshakeHandler.class.getClassLoader()); - private static final boolean glassFish40WsPresent = ClassUtils.isPresent( - "org.glassfish.tyrus.server.TyrusEndpoint", HandshakeHandler.class.getClassLoader()); + private static final boolean glassFishWsPresent = ClassUtils.isPresent( + "org.glassfish.tyrus.servlet.TyrusHttpUpgradeHandler", DefaultHandshakeHandler.class.getClassLoader()); private final RequestUpgradeStrategy requestUpgradeStrategy; @@ -90,29 +87,24 @@ public class DefaultHandshakeHandler implements HandshakeHandler { private static RequestUpgradeStrategy initRequestUpgradeStrategy() { String className; - if (tomcatWsPresent) { - className = "org.springframework.web.socket.server.support.TomcatRequestUpgradeStrategy"; + if (jettyWsPresent) { + className = "org.springframework.web.socket.server.jetty.JettyRequestUpgradeStrategy"; } - else if (jettyWsPresent) { - className = "org.springframework.web.socket.server.support.JettyRequestUpgradeStrategy"; + else if (tomcatWsPresent) { + className = "org.springframework.web.socket.server.standard.TomcatRequestUpgradeStrategy"; } else if (glassFishWsPresent) { - if (glassFish40WsPresent) { - className = "org.springframework.web.socket.server.support.GlassFish40RequestUpgradeStrategy"; - } - else { - className = "org.springframework.web.socket.server.support.GlassFishRequestUpgradeStrategy"; - } + className = "org.springframework.web.socket.server.standard.GlassFishRequestUpgradeStrategy"; } else { - throw new IllegalStateException("No suitable " + RequestUpgradeStrategy.class.getSimpleName()); + throw new IllegalStateException("No suitable default RequestUpgradeStrategy found"); } try { Class clazz = ClassUtils.forName(className, DefaultHandshakeHandler.class.getClassLoader()); return (RequestUpgradeStrategy) BeanUtils.instantiateClass(clazz.getConstructor()); } - catch (Throwable t) { - throw new IllegalStateException("Failed to instantiate " + className, t); + catch (Throwable ex) { + throw new IllegalStateException("Failed to instantiate RequestUpgradeStrategy: " + className, ex); } } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/GlassFish40RequestUpgradeStrategy.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/support/GlassFish40RequestUpgradeStrategy.java deleted file mode 100644 index cd7d88336bd..00000000000 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/GlassFish40RequestUpgradeStrategy.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2002-2013 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * 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 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.web.socket.server.support; - -import java.lang.reflect.Constructor; -import java.util.ArrayList; -import java.util.List; - -import javax.websocket.WebSocketContainer; - -import org.glassfish.tyrus.core.EndpointWrapper; -import org.glassfish.tyrus.spi.SPIEndpoint; -import org.glassfish.tyrus.websockets.WebSocketApplication; -import org.springframework.util.ClassUtils; -import org.springframework.web.socket.WebSocketExtension; - -/** - * Extension of the {@link AbstractGlassFishRequestUpgradeStrategy} that provides support - * for only GlassFish 4.0. - * - * @author Rossen Stoyanchev - * @author Michael Irwin - * @since 4.0 - */ -public class GlassFish40RequestUpgradeStrategy extends AbstractGlassFishRequestUpgradeStrategy { - - protected List getInstalledExtensions(WebSocketContainer container) { - try { - return super.getInstalledExtensions(container); - } - catch (UnsupportedOperationException e) { - return new ArrayList(); - } - } - - protected WebSocketApplication createTyrusEndpoint(EndpointWrapper endpoint) { - try { - String name = "org.glassfish.tyrus.server.TyrusEndpoint"; - Class clazz = ClassUtils.forName(name, this.getClass().getClassLoader()); - Constructor constructor = clazz.getConstructor(SPIEndpoint.class); - return (WebSocketApplication) constructor.newInstance(endpoint); - } - catch (ReflectiveOperationException exception) { - throw new RuntimeException(exception); - } - } - -} diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/HandshakeInterceptorChain.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/support/HandshakeInterceptorChain.java index af514cee080..2e1be47bbab 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/HandshakeInterceptorChain.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/support/HandshakeInterceptorChain.java @@ -22,6 +22,7 @@ import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; + import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.socket.WebSocketHandler; @@ -35,7 +36,7 @@ import org.springframework.web.socket.server.HandshakeInterceptor; */ public class HandshakeInterceptorChain { - private static final Log logger = LogFactory.getLog(WebSocketHttpRequestHandler.class); + private static final Log logger = LogFactory.getLog(HandshakeInterceptorChain.class); private final List interceptors; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/HttpSessionHandshakeInterceptor.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/support/HttpSessionHandshakeInterceptor.java index afcb7888f04..611f37f1cd6 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/HttpSessionHandshakeInterceptor.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/support/HttpSessionHandshakeInterceptor.java @@ -19,11 +19,11 @@ package org.springframework.web.socket.server.support; import java.util.Collection; import java.util.Enumeration; import java.util.Map; - import javax.servlet.http.HttpSession; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; + import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.http.server.ServletServerHttpRequest; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/WebSocketHttpRequestHandler.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/support/WebSocketHttpRequestHandler.java index 80c87f07588..f768e33556b 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/WebSocketHttpRequestHandler.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/support/WebSocketHttpRequestHandler.java @@ -35,8 +35,8 @@ import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.server.HandshakeFailureException; import org.springframework.web.socket.server.HandshakeHandler; import org.springframework.web.socket.server.HandshakeInterceptor; -import org.springframework.web.socket.support.ExceptionWebSocketHandlerDecorator; -import org.springframework.web.socket.support.LoggingWebSocketHandlerDecorator; +import org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator; +import org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator; /** * A {@link HttpRequestHandler} for processing WebSocket handshake requests. diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/SockJsHttpRequestHandler.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/SockJsHttpRequestHandler.java index cacc71ccbdf..477a912155f 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/SockJsHttpRequestHandler.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/SockJsHttpRequestHandler.java @@ -30,8 +30,8 @@ import org.springframework.util.Assert; import org.springframework.web.HttpRequestHandler; import org.springframework.web.servlet.HandlerMapping; import org.springframework.web.socket.WebSocketHandler; -import org.springframework.web.socket.support.ExceptionWebSocketHandlerDecorator; -import org.springframework.web.socket.support.LoggingWebSocketHandlerDecorator; +import org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator; +import org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator; /** * An {@link HttpRequestHandler} that allows mapping a {@link SockJsService} to requests diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/SockJsService.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/SockJsService.java index b6acc14d364..a5375e16133 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/SockJsService.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/SockJsService.java @@ -19,7 +19,7 @@ package org.springframework.web.socket.sockjs; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.socket.WebSocketHandler; -import org.springframework.web.socket.support.ExceptionWebSocketHandlerDecorator; +import org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator; /** * The main entry point for processing HTTP requests from SockJS clients. diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/handler/SockJsWebSocketHandler.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/handler/SockJsWebSocketHandler.java index c96d5920bf2..42c9c01d324 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/handler/SockJsWebSocketHandler.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/handler/SockJsWebSocketHandler.java @@ -23,7 +23,7 @@ import org.springframework.web.socket.CloseStatus; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.WebSocketSession; -import org.springframework.web.socket.adapter.TextWebSocketHandlerAdapter; +import org.springframework.web.socket.handler.TextWebSocketHandler; import org.springframework.web.socket.sockjs.transport.session.SockJsServiceConfig; import org.springframework.web.socket.sockjs.transport.session.WebSocketServerSockJsSession; @@ -42,7 +42,7 @@ import org.springframework.web.socket.sockjs.transport.session.WebSocketServerSo * @author Rossen Stoyanchev * @since 4.0 */ -public class SockJsWebSocketHandler extends TextWebSocketHandlerAdapter { +public class SockJsWebSocketHandler extends TextWebSocketHandler { private final SockJsServiceConfig sockJsServiceConfig; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/support/SubProtocolCapable.java b/spring-websocket/src/main/java/org/springframework/web/socket/support/SubProtocolCapable.java deleted file mode 100644 index 75449a8a25b..00000000000 --- a/spring-websocket/src/main/java/org/springframework/web/socket/support/SubProtocolCapable.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.springframework.web.socket.support; - -import java.util.List; - -/** - * An interface for WebSocket handlers that support sub-protocols as defined in RFC 6455. - * - * @author Rossen Stoyanchev - * @since 4.0 - * @see RFC-6455 section 1.9 - */ -public interface SubProtocolCapable { - - /** - * Return the list of supported sub-protocols. - */ - List getSubProtocols(); -} diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/AbstractWebSocketIntegrationTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/AbstractWebSocketIntegrationTests.java index 043374edc74..29dcc584ba5 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/AbstractWebSocketIntegrationTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/AbstractWebSocketIntegrationTests.java @@ -31,8 +31,8 @@ import org.springframework.web.context.support.AnnotationConfigWebApplicationCon import org.springframework.web.socket.client.WebSocketClient; import org.springframework.web.socket.server.support.DefaultHandshakeHandler; import org.springframework.web.socket.server.RequestUpgradeStrategy; -import org.springframework.web.socket.server.support.JettyRequestUpgradeStrategy; -import org.springframework.web.socket.server.support.TomcatRequestUpgradeStrategy; +import org.springframework.web.socket.server.jetty.JettyRequestUpgradeStrategy; +import org.springframework.web.socket.server.standard.TomcatRequestUpgradeStrategy; /** * Base class for WebSocket integration tests. diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/WebSocketIntegrationTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/WebSocketIntegrationTests.java index 14c88ad4d6b..a2d5ec37121 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/WebSocketIntegrationTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/WebSocketIntegrationTests.java @@ -26,15 +26,14 @@ import org.junit.runners.Parameterized; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.web.socket.adapter.TextWebSocketHandlerAdapter; -import org.springframework.web.socket.adapter.WebSocketHandlerAdapter; -import org.springframework.web.socket.client.endpoint.StandardWebSocketClient; +import org.springframework.web.socket.handler.TextWebSocketHandler; +import org.springframework.web.socket.handler.AbstractWebSocketHandler; +import org.springframework.web.socket.client.standard.StandardWebSocketClient; import org.springframework.web.socket.client.jetty.JettyWebSocketClient; import org.springframework.web.socket.server.support.DefaultHandshakeHandler; import org.springframework.web.socket.config.annotation.EnableWebSocket; import org.springframework.web.socket.config.annotation.WebSocketConfigurer; import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; -import org.springframework.web.socket.support.WebSocketHttpHeaders; import static org.junit.Assert.*; @@ -67,7 +66,7 @@ public class WebSocketIntegrationTests extends AbstractWebSocketIntegrationTest headers.setSecWebSocketProtocol("foo"); WebSocketSession session = this.webSocketClient.doHandshake( - new WebSocketHandlerAdapter(), headers, new URI(getWsBaseUrl() + "/ws")).get(); + new AbstractWebSocketHandler() {}, headers, new URI(getWsBaseUrl() + "/ws")).get(); assertEquals("foo", session.getAcceptedProtocol()); } @@ -92,7 +91,7 @@ public class WebSocketIntegrationTests extends AbstractWebSocketIntegrationTest } } - private static class TestServerWebSocketHandler extends TextWebSocketHandlerAdapter { + private static class TestServerWebSocketHandler extends TextWebSocketHandler { } } diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/adapter/ConvertingEncoderDecoderSupportTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/adapter/ConvertingEncoderDecoderSupportTests.java index ff2bb7486d5..f08b2bb2648 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/adapter/ConvertingEncoderDecoderSupportTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/adapter/ConvertingEncoderDecoderSupportTests.java @@ -39,12 +39,13 @@ import org.springframework.core.convert.support.GenericConversionService; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.springframework.web.socket.ContextLoaderTestUtils; +import org.springframework.web.socket.adapter.standard.ConvertingEncoderDecoderSupport; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; /** - * Test for {@link ConvertingEncoderDecoderSupport}. + * Test for {@link org.springframework.web.socket.adapter.standard.ConvertingEncoderDecoderSupport}. * * @author Phillip Webb */ diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/adapter/JettyWebSocketHandlerAdapterTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/adapter/JettyWebSocketHandlerAdapterTests.java index cd797a92aa1..964fc967f88 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/adapter/JettyWebSocketHandlerAdapterTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/adapter/JettyWebSocketHandlerAdapterTests.java @@ -21,11 +21,13 @@ import org.junit.Before; import org.junit.Test; import org.springframework.web.socket.CloseStatus; import org.springframework.web.socket.WebSocketHandler; +import org.springframework.web.socket.adapter.jetty.JettyWebSocketHandlerAdapter; +import org.springframework.web.socket.adapter.jetty.JettyWebSocketSession; import static org.mockito.Mockito.*; /** - * Test fixture for {@link JettyWebSocketHandlerAdapter}. + * Test fixture for {@link org.springframework.web.socket.adapter.jetty.JettyWebSocketHandlerAdapter}. * * @author Rossen Stoyanchev */ diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/adapter/StandardWebSocketHandlerAdapterTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/adapter/StandardWebSocketHandlerAdapterTests.java index 6a3b071adf7..19366b6c9c1 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/adapter/StandardWebSocketHandlerAdapterTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/adapter/StandardWebSocketHandlerAdapterTests.java @@ -25,13 +25,15 @@ import org.junit.Before; import org.junit.Test; import org.springframework.web.socket.CloseStatus; import org.springframework.web.socket.WebSocketHandler; +import org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter; +import org.springframework.web.socket.adapter.standard.StandardWebSocketSession; import static org.junit.Assert.*; import static org.mockito.Matchers.*; import static org.mockito.Mockito.*; /** - * Test fixture for {@link StandardWebSocketHandlerAdapter}. + * Test fixture for {@link org.springframework.web.socket.adapter.standard.StandardWebSocketHandlerAdapter}. * * @author Rossen Stoyanchev */ diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/client/WebSocketConnectionManagerTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/client/WebSocketConnectionManagerTests.java index 0a4c4ec7c4f..2c7827a9d00 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/client/WebSocketConnectionManagerTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/client/WebSocketConnectionManagerTests.java @@ -28,10 +28,10 @@ import org.springframework.util.concurrent.ListenableFuture; import org.springframework.util.concurrent.ListenableFutureTask; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.WebSocketSession; -import org.springframework.web.socket.adapter.WebSocketHandlerAdapter; -import org.springframework.web.socket.support.LoggingWebSocketHandlerDecorator; -import org.springframework.web.socket.support.WebSocketHandlerDecorator; -import org.springframework.web.socket.support.WebSocketHttpHeaders; +import org.springframework.web.socket.handler.AbstractWebSocketHandler; +import org.springframework.web.socket.handler.LoggingWebSocketHandlerDecorator; +import org.springframework.web.socket.handler.WebSocketHandlerDecorator; +import org.springframework.web.socket.WebSocketHttpHeaders; import org.springframework.web.util.UriComponentsBuilder; import static org.junit.Assert.*; @@ -45,11 +45,11 @@ public class WebSocketConnectionManagerTests { @Test public void openConnection() throws Exception { - List subprotocols = Arrays.asList("abc"); TestLifecycleWebSocketClient client = new TestLifecycleWebSocketClient(false); - WebSocketHandler handler = new WebSocketHandlerAdapter(); + WebSocketHandler handler = new AbstractWebSocketHandler() { + }; WebSocketConnectionManager manager = new WebSocketConnectionManager(client, handler , "/path/{id}", "123"); manager.setSubProtocols(subprotocols); @@ -69,9 +69,9 @@ public class WebSocketConnectionManagerTests { @Test public void syncClientLifecycle() throws Exception { - TestLifecycleWebSocketClient client = new TestLifecycleWebSocketClient(false); - WebSocketHandler handler = new WebSocketHandlerAdapter(); + WebSocketHandler handler = new AbstractWebSocketHandler() { + }; WebSocketConnectionManager manager = new WebSocketConnectionManager(client, handler , "/a"); manager.startInternal(); @@ -85,7 +85,8 @@ public class WebSocketConnectionManagerTests { public void dontSyncClientLifecycle() throws Exception { TestLifecycleWebSocketClient client = new TestLifecycleWebSocketClient(true); - WebSocketHandler handler = new WebSocketHandlerAdapter(); + WebSocketHandler handler = new AbstractWebSocketHandler() { + }; WebSocketConnectionManager manager = new WebSocketConnectionManager(client, handler , "/a"); manager.startInternal(); diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/client/jetty/JettyWebSocketClientTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/client/jetty/JettyWebSocketClientTests.java index 7eb973817fc..87d437d32ea 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/client/jetty/JettyWebSocketClientTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/client/jetty/JettyWebSocketClientTests.java @@ -32,10 +32,10 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.SocketUtils; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.WebSocketSession; -import org.springframework.web.socket.adapter.JettyWebSocketHandlerAdapter; -import org.springframework.web.socket.adapter.JettyWebSocketSession; -import org.springframework.web.socket.adapter.TextWebSocketHandlerAdapter; -import org.springframework.web.socket.support.WebSocketHttpHeaders; +import org.springframework.web.socket.adapter.jetty.JettyWebSocketHandlerAdapter; +import org.springframework.web.socket.adapter.jetty.JettyWebSocketSession; +import org.springframework.web.socket.handler.TextWebSocketHandler; +import org.springframework.web.socket.WebSocketHttpHeaders; import static org.junit.Assert.*; @@ -59,7 +59,7 @@ public class JettyWebSocketClientTests { int port = SocketUtils.findAvailableTcpPort(); - this.server = new TestJettyWebSocketServer(port, new TextWebSocketHandlerAdapter()); + this.server = new TestJettyWebSocketServer(port, new TextWebSocketHandler()); this.server.start(); this.client = new JettyWebSocketClient(); @@ -82,7 +82,7 @@ public class JettyWebSocketClientTests { WebSocketHttpHeaders headers = new WebSocketHttpHeaders(); headers.setSecWebSocketProtocol(Arrays.asList("echo")); - this.wsSession = this.client.doHandshake(new TextWebSocketHandlerAdapter(), headers, new URI(this.wsUrl)).get(); + this.wsSession = this.client.doHandshake(new TextWebSocketHandler(), headers, new URI(this.wsUrl)).get(); assertEquals(this.wsUrl, this.wsSession.getUri().toString()); assertEquals("echo", this.wsSession.getAcceptedProtocol()); diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/client/endpoint/StandardWebSocketClientTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/client/standard/StandardWebSocketClientTests.java similarity index 94% rename from spring-websocket/src/test/java/org/springframework/web/socket/client/endpoint/StandardWebSocketClientTests.java rename to spring-websocket/src/test/java/org/springframework/web/socket/client/standard/StandardWebSocketClientTests.java index 30b2a80bf1b..c57ec07f277 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/client/endpoint/StandardWebSocketClientTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/client/standard/StandardWebSocketClientTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.client.endpoint; +package org.springframework.web.socket.client.standard; import java.net.URI; import java.util.Arrays; @@ -22,7 +22,6 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; - import javax.websocket.ClientEndpointConfig; import javax.websocket.Endpoint; import javax.websocket.WebSocketContainer; @@ -30,10 +29,11 @@ import javax.websocket.WebSocketContainer; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; + import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.WebSocketSession; -import org.springframework.web.socket.adapter.WebSocketHandlerAdapter; -import org.springframework.web.socket.support.WebSocketHttpHeaders; +import org.springframework.web.socket.handler.AbstractWebSocketHandler; +import org.springframework.web.socket.WebSocketHttpHeaders; import static org.junit.Assert.*; import static org.mockito.Mockito.*; @@ -57,7 +57,8 @@ public class StandardWebSocketClientTests { @Before public void setup() { this.headers = new WebSocketHttpHeaders(); - this.wsHandler = new WebSocketHandlerAdapter(); + this.wsHandler = new AbstractWebSocketHandler() { + }; this.wsContainer = mock(WebSocketContainer.class); this.wsClient = new StandardWebSocketClient(this.wsContainer); } diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParserTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParserTests.java index a0e105b39b4..499bea77ab1 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParserTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParserTests.java @@ -39,7 +39,7 @@ import org.springframework.web.socket.messaging.StompSubProtocolHandler; import org.springframework.web.socket.messaging.SubProtocolWebSocketHandler; import org.springframework.web.socket.server.support.WebSocketHttpRequestHandler; import org.springframework.web.socket.sockjs.SockJsHttpRequestHandler; -import org.springframework.web.socket.support.WebSocketHandlerDecorator; +import org.springframework.web.socket.handler.WebSocketHandlerDecorator; import java.util.Arrays; import java.util.List; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/config/annotation/AbstractWebSocketHandlerRegistrationTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/config/annotation/AbstractWebSocketHandlerRegistrationTests.java index 1115bb837e3..745b9b7b5f5 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/config/annotation/AbstractWebSocketHandlerRegistrationTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/config/annotation/AbstractWebSocketHandlerRegistrationTests.java @@ -25,8 +25,7 @@ import org.junit.Test; import org.mockito.Mockito; import org.springframework.scheduling.TaskScheduler; import org.springframework.web.socket.WebSocketHandler; -import org.springframework.web.socket.adapter.TextWebSocketHandlerAdapter; -import org.springframework.web.socket.config.annotation.AbstractWebSocketHandlerRegistration; +import org.springframework.web.socket.handler.TextWebSocketHandler; import org.springframework.web.socket.server.support.DefaultHandshakeHandler; import org.springframework.web.socket.server.HandshakeHandler; import org.springframework.web.socket.server.HandshakeInterceptor; @@ -59,7 +58,7 @@ public class AbstractWebSocketHandlerRegistrationTests { @Test public void minimal() { - WebSocketHandler wsHandler = new TextWebSocketHandlerAdapter(); + WebSocketHandler wsHandler = new TextWebSocketHandler(); this.registration.addHandler(wsHandler, "/foo", "/bar"); List mappings = this.registration.getMappings(); @@ -77,7 +76,7 @@ public class AbstractWebSocketHandlerRegistrationTests { @Test public void interceptors() { - WebSocketHandler wsHandler = new TextWebSocketHandlerAdapter(); + WebSocketHandler wsHandler = new TextWebSocketHandler(); HttpSessionHandshakeInterceptor interceptor = new HttpSessionHandshakeInterceptor(); this.registration.addHandler(wsHandler, "/foo").addInterceptors(interceptor); @@ -94,7 +93,7 @@ public class AbstractWebSocketHandlerRegistrationTests { @Test public void interceptorsPassedToSockJsRegistration() { - WebSocketHandler wsHandler = new TextWebSocketHandlerAdapter(); + WebSocketHandler wsHandler = new TextWebSocketHandler(); HttpSessionHandshakeInterceptor interceptor = new HttpSessionHandshakeInterceptor(); this.registration.addHandler(wsHandler, "/foo").addInterceptors(interceptor).withSockJS(); @@ -112,7 +111,7 @@ public class AbstractWebSocketHandlerRegistrationTests { @Test public void handshakeHandler() { - WebSocketHandler wsHandler = new TextWebSocketHandlerAdapter(); + WebSocketHandler wsHandler = new TextWebSocketHandler(); HandshakeHandler handshakeHandler = new DefaultHandshakeHandler(); this.registration.addHandler(wsHandler, "/foo").setHandshakeHandler(handshakeHandler); @@ -129,7 +128,7 @@ public class AbstractWebSocketHandlerRegistrationTests { @Test public void handshakeHandlerPassedToSockJsRegistration() { - WebSocketHandler wsHandler = new TextWebSocketHandlerAdapter(); + WebSocketHandler wsHandler = new TextWebSocketHandler(); HandshakeHandler handshakeHandler = new DefaultHandshakeHandler(); this.registration.addHandler(wsHandler, "/foo").setHandshakeHandler(handshakeHandler).withSockJS(); diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/config/annotation/WebSocketConfigurationTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/config/annotation/WebSocketConfigurationTests.java index 3f3d0c732e5..24949e432a5 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/config/annotation/WebSocketConfigurationTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/config/annotation/WebSocketConfigurationTests.java @@ -31,12 +31,9 @@ import org.springframework.web.socket.AbstractWebSocketIntegrationTests; import org.springframework.web.socket.JettyWebSocketTestServer; import org.springframework.web.socket.TomcatWebSocketTestServer; import org.springframework.web.socket.WebSocketSession; -import org.springframework.web.socket.adapter.WebSocketHandlerAdapter; -import org.springframework.web.socket.client.endpoint.StandardWebSocketClient; +import org.springframework.web.socket.handler.AbstractWebSocketHandler; +import org.springframework.web.socket.client.standard.StandardWebSocketClient; import org.springframework.web.socket.client.jetty.JettyWebSocketClient; -import org.springframework.web.socket.config.annotation.EnableWebSocket; -import org.springframework.web.socket.config.annotation.WebSocketConfigurer; -import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; import org.springframework.web.socket.server.HandshakeHandler; import org.springframework.web.socket.sockjs.transport.handler.WebSocketTransportHandler; @@ -68,7 +65,7 @@ public class WebSocketConfigurationTests extends AbstractWebSocketIntegrationTes public void registerWebSocketHandler() throws Exception { WebSocketSession session = this.webSocketClient.doHandshake( - new WebSocketHandlerAdapter(), getWsBaseUrl() + "/ws").get(); + new AbstractWebSocketHandler() {}, getWsBaseUrl() + "/ws").get(); TestWebSocketHandler serverHandler = this.wac.getBean(TestWebSocketHandler.class); assertTrue(serverHandler.connectLatch.await(2, TimeUnit.SECONDS)); @@ -80,7 +77,7 @@ public class WebSocketConfigurationTests extends AbstractWebSocketIntegrationTes public void registerWebSocketHandlerWithSockJS() throws Exception { WebSocketSession session = this.webSocketClient.doHandshake( - new WebSocketHandlerAdapter(), getWsBaseUrl() + "/sockjs/websocket").get(); + new AbstractWebSocketHandler() {}, getWsBaseUrl() + "/sockjs/websocket").get(); TestWebSocketHandler serverHandler = this.wac.getBean(TestWebSocketHandler.class); assertTrue(serverHandler.connectLatch.await(2, TimeUnit.SECONDS)); @@ -113,7 +110,7 @@ public class WebSocketConfigurationTests extends AbstractWebSocketIntegrationTes } } - private static class TestWebSocketHandler extends WebSocketHandlerAdapter { + private static class TestWebSocketHandler extends AbstractWebSocketHandler { private CountDownLatch connectLatch = new CountDownLatch(1); diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/config/annotation/WebSocketMessageBrokerConfigurationSupportTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/config/annotation/WebSocketMessageBrokerConfigurationSupportTests.java index bbd50c0e96e..f38ba1be1bd 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/config/annotation/WebSocketMessageBrokerConfigurationSupportTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/config/annotation/WebSocketMessageBrokerConfigurationSupportTests.java @@ -42,12 +42,9 @@ import org.springframework.stereotype.Controller; import org.springframework.web.servlet.HandlerMapping; import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping; import org.springframework.web.socket.TextMessage; -import org.springframework.web.socket.config.annotation.DelegatingWebSocketMessageBrokerConfiguration; -import org.springframework.web.socket.config.annotation.StompEndpointRegistry; -import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; import org.springframework.web.socket.messaging.StompTextMessageBuilder; import org.springframework.web.socket.messaging.SubProtocolWebSocketHandler; -import org.springframework.web.socket.support.TestWebSocketSession; +import org.springframework.web.socket.handler.TestWebSocketSession; import static org.junit.Assert.*; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/support/BeanCreatingHandlerProviderTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/handler/BeanCreatingHandlerProviderTests.java similarity index 98% rename from spring-websocket/src/test/java/org/springframework/web/socket/support/BeanCreatingHandlerProviderTests.java rename to spring-websocket/src/test/java/org/springframework/web/socket/handler/BeanCreatingHandlerProviderTests.java index 6267b758896..a252ec8df05 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/support/BeanCreatingHandlerProviderTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/handler/BeanCreatingHandlerProviderTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.support; +package org.springframework.web.socket.handler; import org.junit.Test; import org.springframework.beans.BeanInstantiationException; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/support/ExceptionWebSocketHandlerDecoratorTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/handler/ExceptionWebSocketHandlerDecoratorTests.java similarity index 98% rename from spring-websocket/src/test/java/org/springframework/web/socket/support/ExceptionWebSocketHandlerDecoratorTests.java rename to spring-websocket/src/test/java/org/springframework/web/socket/handler/ExceptionWebSocketHandlerDecoratorTests.java index f1d7d86667d..d1364c13046 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/support/ExceptionWebSocketHandlerDecoratorTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/handler/ExceptionWebSocketHandlerDecoratorTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.support; +package org.springframework.web.socket.handler; import org.junit.Before; import org.junit.Test; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/support/PerConnectionWebSocketHandlerTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/handler/PerConnectionWebSocketHandlerTests.java similarity index 90% rename from spring-websocket/src/test/java/org/springframework/web/socket/support/PerConnectionWebSocketHandlerTests.java rename to spring-websocket/src/test/java/org/springframework/web/socket/handler/PerConnectionWebSocketHandlerTests.java index 76cefcb6d31..4a6550d8dec 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/support/PerConnectionWebSocketHandlerTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/handler/PerConnectionWebSocketHandlerTests.java @@ -14,14 +14,13 @@ * limitations under the License. */ -package org.springframework.web.socket.support; +package org.springframework.web.socket.handler; import org.junit.Test; import org.springframework.beans.factory.DisposableBean; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.web.socket.CloseStatus; import org.springframework.web.socket.WebSocketSession; -import org.springframework.web.socket.adapter.WebSocketHandlerAdapter; import static org.junit.Assert.*; @@ -57,7 +56,7 @@ public class PerConnectionWebSocketHandlerTests { } - public static class EchoHandler extends WebSocketHandlerAdapter implements DisposableBean { + public static class EchoHandler extends AbstractWebSocketHandler implements DisposableBean { private static int initCount; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/support/TestPrincipal.java b/spring-websocket/src/test/java/org/springframework/web/socket/handler/TestPrincipal.java similarity index 96% rename from spring-websocket/src/test/java/org/springframework/web/socket/support/TestPrincipal.java rename to spring-websocket/src/test/java/org/springframework/web/socket/handler/TestPrincipal.java index 7503b8c55f0..5f159d9334b 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/support/TestPrincipal.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/handler/TestPrincipal.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.support; +package org.springframework.web.socket.handler; import java.security.Principal; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/support/TestWebSocketSession.java b/spring-websocket/src/test/java/org/springframework/web/socket/handler/TestWebSocketSession.java similarity index 98% rename from spring-websocket/src/test/java/org/springframework/web/socket/support/TestWebSocketSession.java rename to spring-websocket/src/test/java/org/springframework/web/socket/handler/TestWebSocketSession.java index dd8f90817e3..d9f2031732c 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/support/TestWebSocketSession.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/handler/TestWebSocketSession.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.support; +package org.springframework.web.socket.handler; import java.io.IOException; import java.net.InetSocketAddress; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/support/WebSocketHandlerDecoratorTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/handler/WebSocketHandlerDecoratorTests.java similarity index 85% rename from spring-websocket/src/test/java/org/springframework/web/socket/support/WebSocketHandlerDecoratorTests.java rename to spring-websocket/src/test/java/org/springframework/web/socket/handler/WebSocketHandlerDecoratorTests.java index b75e8e86239..78949645f28 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/support/WebSocketHandlerDecoratorTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/handler/WebSocketHandlerDecoratorTests.java @@ -14,10 +14,9 @@ * limitations under the License. */ -package org.springframework.web.socket.support; +package org.springframework.web.socket.handler; import org.junit.Test; -import org.springframework.web.socket.adapter.WebSocketHandlerAdapter; import static org.junit.Assert.*; @@ -28,10 +27,10 @@ import static org.junit.Assert.*; */ public class WebSocketHandlerDecoratorTests { - @Test public void getLastHandler() { - WebSocketHandlerAdapter h1 = new WebSocketHandlerAdapter(); + AbstractWebSocketHandler h1 = new AbstractWebSocketHandler() { + }; WebSocketHandlerDecorator h2 = new WebSocketHandlerDecorator(h1); WebSocketHandlerDecorator h3 = new WebSocketHandlerDecorator(h2); diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/support/WebSocketHttpHeadersTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/handler/WebSocketHttpHeadersTests.java similarity index 93% rename from spring-websocket/src/test/java/org/springframework/web/socket/support/WebSocketHttpHeadersTests.java rename to spring-websocket/src/test/java/org/springframework/web/socket/handler/WebSocketHttpHeadersTests.java index 58161b9bfdf..4297fa0f441 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/support/WebSocketHttpHeadersTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/handler/WebSocketHttpHeadersTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.support; +package org.springframework.web.socket.handler; import java.util.ArrayList; import java.util.List; @@ -23,6 +23,7 @@ import org.hamcrest.Matchers; import org.junit.Before; import org.junit.Test; import org.springframework.web.socket.WebSocketExtension; +import org.springframework.web.socket.WebSocketHttpHeaders; import static org.junit.Assert.*; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/messaging/SimpAnnotationMethodIntegrationTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/messaging/SimpAnnotationMethodIntegrationTests.java index 2e25fee6847..1352b61323c 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/messaging/SimpAnnotationMethodIntegrationTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/messaging/SimpAnnotationMethodIntegrationTests.java @@ -47,8 +47,8 @@ import org.springframework.web.socket.JettyWebSocketTestServer; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.TomcatWebSocketTestServer; import org.springframework.web.socket.WebSocketSession; -import org.springframework.web.socket.adapter.TextWebSocketHandlerAdapter; -import org.springframework.web.socket.client.endpoint.StandardWebSocketClient; +import org.springframework.web.socket.handler.TextWebSocketHandler; +import org.springframework.web.socket.client.standard.StandardWebSocketClient; import org.springframework.web.socket.client.jetty.JettyWebSocketClient; import org.springframework.web.socket.config.annotation.DelegatingWebSocketMessageBrokerConfiguration; import org.springframework.web.socket.config.annotation.StompEndpointRegistry; @@ -170,7 +170,7 @@ public class SimpAnnotationMethodIntegrationTests extends AbstractWebSocketInteg } - private static class TestClientWebSocketHandler extends TextWebSocketHandlerAdapter { + private static class TestClientWebSocketHandler extends TextWebSocketHandler { private final TextMessage[] messagesToSend; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/messaging/StompSubProtocolHandlerTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/messaging/StompSubProtocolHandlerTests.java index 8dcc2de53d3..d0b143e5aa3 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/messaging/StompSubProtocolHandlerTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/messaging/StompSubProtocolHandlerTests.java @@ -34,7 +34,7 @@ import org.springframework.messaging.simp.stomp.StompDecoder; import org.springframework.messaging.simp.stomp.StompHeaderAccessor; import org.springframework.messaging.support.MessageBuilder; import org.springframework.web.socket.TextMessage; -import org.springframework.web.socket.support.TestWebSocketSession; +import org.springframework.web.socket.handler.TestWebSocketSession; import static org.junit.Assert.*; import static org.mockito.Mockito.*; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandlerTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandlerTests.java index 0ddce92313f..399a7d1a36e 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandlerTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/messaging/SubProtocolWebSocketHandlerTests.java @@ -24,7 +24,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.SubscribableChannel; -import org.springframework.web.socket.support.TestWebSocketSession; +import org.springframework.web.socket.handler.TestWebSocketSession; import static org.mockito.Mockito.*; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/server/DefaultHandshakeHandlerTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/server/DefaultHandshakeHandlerTests.java index db8021c7576..f336cd7621d 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/server/DefaultHandshakeHandlerTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/server/DefaultHandshakeHandlerTests.java @@ -27,11 +27,11 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.springframework.web.socket.AbstractHttpRequestTests; import org.springframework.web.socket.server.support.DefaultHandshakeHandler; -import org.springframework.web.socket.support.SubProtocolCapable; +import org.springframework.web.socket.SubProtocolCapable; import org.springframework.web.socket.WebSocketExtension; import org.springframework.web.socket.WebSocketHandler; -import org.springframework.web.socket.adapter.TextWebSocketHandlerAdapter; -import org.springframework.web.socket.support.WebSocketHttpHeaders; +import org.springframework.web.socket.handler.TextWebSocketHandler; +import org.springframework.web.socket.WebSocketHttpHeaders; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.*; @@ -72,7 +72,7 @@ public class DefaultHandshakeHandlerTests extends AbstractHttpRequestTests { headers.setSecWebSocketKey("82/ZS2YHjEnUN97HLL8tbw=="); headers.setSecWebSocketProtocol("STOMP"); - WebSocketHandler handler = new TextWebSocketHandlerAdapter(); + WebSocketHandler handler = new TextWebSocketHandler(); Map attributes = Collections.emptyMap(); this.handshakeHandler.doHandshake(this.request, this.response, handler, attributes); @@ -125,7 +125,7 @@ public class DefaultHandshakeHandlerTests extends AbstractHttpRequestTests { } - private static class SubProtocolCapableHandler extends TextWebSocketHandlerAdapter implements SubProtocolCapable { + private static class SubProtocolCapableHandler extends TextWebSocketHandler implements SubProtocolCapable { private final List subProtocols; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/server/endpoint/ServerEndpointExporterTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/server/standard/ServerEndpointExporterTests.java similarity index 90% rename from spring-websocket/src/test/java/org/springframework/web/socket/server/endpoint/ServerEndpointExporterTests.java rename to spring-websocket/src/test/java/org/springframework/web/socket/server/standard/ServerEndpointExporterTests.java index b3d509d3919..9f25850a8cf 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/server/endpoint/ServerEndpointExporterTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/server/standard/ServerEndpointExporterTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.server.endpoint; +package org.springframework.web.socket.server.standard; import javax.websocket.Endpoint; import javax.websocket.EndpointConfig; @@ -28,13 +28,11 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.mock.web.test.MockServletContext; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; -import org.springframework.web.socket.server.support.ServerEndpointExporter; -import org.springframework.web.socket.server.support.ServerEndpointRegistration; import static org.mockito.Mockito.*; /** - * Test fixture for {@link org.springframework.web.socket.server.support.ServerEndpointExporter}. + * Test fixture for {@link ServerEndpointExporter}. * * @author Rossen Stoyanchev */ diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/server/endpoint/ServerEndpointRegistrationTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/server/standard/ServerEndpointRegistrationTests.java similarity index 91% rename from spring-websocket/src/test/java/org/springframework/web/socket/server/endpoint/ServerEndpointRegistrationTests.java rename to spring-websocket/src/test/java/org/springframework/web/socket/server/standard/ServerEndpointRegistrationTests.java index 2b5a21303d5..0ace6121eff 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/server/endpoint/ServerEndpointRegistrationTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/server/standard/ServerEndpointRegistrationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.server.endpoint; +package org.springframework.web.socket.server.standard; import javax.websocket.Endpoint; import javax.websocket.EndpointConfig; @@ -26,12 +26,11 @@ import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.web.socket.server.support.ServerEndpointRegistration; import static org.junit.Assert.*; /** - * Test fixture for {@link org.springframework.web.socket.server.support.ServerEndpointRegistration}. + * Test fixture for {@link ServerEndpointRegistration}. * * @author Rossen Stoyanchev */ diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/server/endpoint/SpringConfiguratorTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/server/standard/SpringConfiguratorTests.java similarity index 96% rename from spring-websocket/src/test/java/org/springframework/web/socket/server/endpoint/SpringConfiguratorTests.java rename to spring-websocket/src/test/java/org/springframework/web/socket/server/standard/SpringConfiguratorTests.java index a4614570565..548825e7711 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/server/endpoint/SpringConfiguratorTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/server/standard/SpringConfiguratorTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.web.socket.server.endpoint; +package org.springframework.web.socket.server.standard; import javax.websocket.server.ServerEndpoint; @@ -29,7 +29,6 @@ import org.springframework.mock.web.test.MockServletContext; import org.springframework.stereotype.Component; import org.springframework.web.context.ContextLoader; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; -import org.springframework.web.socket.server.support.SpringConfigurator; import static org.junit.Assert.*; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/transport/session/AbstractSockJsSessionTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/transport/session/AbstractSockJsSessionTests.java index 093318d471a..962d09ab253 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/transport/session/AbstractSockJsSessionTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/transport/session/AbstractSockJsSessionTests.java @@ -29,7 +29,7 @@ import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.sockjs.SockJsMessageDeliveryException; import org.springframework.web.socket.sockjs.SockJsTransportFailureException; import org.springframework.web.socket.sockjs.support.frame.SockJsFrame; -import org.springframework.web.socket.support.ExceptionWebSocketHandlerDecorator; +import org.springframework.web.socket.handler.ExceptionWebSocketHandlerDecorator; import static org.junit.Assert.*; import static org.mockito.Matchers.*; diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/transport/session/WebSocketServerSockJsSessionTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/transport/session/WebSocketServerSockJsSessionTests.java index 8dda7374dde..5ae1cbb69b7 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/transport/session/WebSocketServerSockJsSessionTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/transport/session/WebSocketServerSockJsSessionTests.java @@ -29,7 +29,7 @@ import org.springframework.web.socket.CloseStatus; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.sockjs.transport.session.WebSocketServerSockJsSessionTests.TestWebSocketServerSockJsSession; -import org.springframework.web.socket.support.TestWebSocketSession; +import org.springframework.web.socket.handler.TestWebSocketSession; import static org.junit.Assert.*; import static org.mockito.Matchers.*;