From 41cdc92fc383934623f14fd144390d16b1ed4a8f Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Wed, 30 Jul 2014 15:39:01 -0400 Subject: [PATCH] Remove AbstractWebSocketClient from SockJsClient SockJsClient now implements WebSocketClient directly without extending AbstractWebSocketClient. Issue: SPR-12030 --- .../socket/sockjs/client/SockJsClient.java | 32 ++++++++++++------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/SockJsClient.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/SockJsClient.java index 156de8e498..0035a9db24 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/SockJsClient.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/SockJsClient.java @@ -25,13 +25,14 @@ import org.springframework.util.Assert; import org.springframework.util.ClassUtils; import org.springframework.util.concurrent.ListenableFuture; import org.springframework.util.concurrent.SettableListenableFuture; -import org.springframework.web.socket.WebSocketExtension; import org.springframework.web.socket.WebSocketHandler; +import org.springframework.web.socket.WebSocketHttpHeaders; import org.springframework.web.socket.WebSocketSession; -import org.springframework.web.socket.client.AbstractWebSocketClient; +import org.springframework.web.socket.client.WebSocketClient; import org.springframework.web.socket.sockjs.frame.Jackson2SockJsMessageCodec; import org.springframework.web.socket.sockjs.frame.SockJsMessageCodec; import org.springframework.web.socket.sockjs.transport.TransportType; +import org.springframework.web.util.UriComponentsBuilder; import java.net.URI; import java.security.Principal; @@ -55,7 +56,7 @@ import java.util.concurrent.ConcurrentHashMap; * @see http://sockjs.org * @see org.springframework.web.socket.sockjs.client.Transport */ -public class SockJsClient extends AbstractWebSocketClient implements Lifecycle { +public class SockJsClient implements WebSocketClient, Lifecycle { private static final boolean jackson2Present = ClassUtils.isPresent( "com.fasterxml.jackson.databind.ObjectMapper", SockJsClient.class.getClassLoader()); @@ -201,23 +202,30 @@ public class SockJsClient extends AbstractWebSocketClient implements Lifecycle { } @Override - protected void assertUri(URI uri) { - Assert.notNull(uri, "uri must not be null"); - String scheme = uri.getScheme(); - Assert.isTrue(scheme != null && ("ws".equals(scheme) || "wss".equals(scheme) - || "http".equals(scheme) || "https".equals(scheme)), "Invalid scheme: " + scheme); + public ListenableFuture doHandshake(WebSocketHandler handler, + String uriTemplate, Object... uriVars) { + + Assert.notNull(uriTemplate, "uriTemplate must not be null"); + URI uri = UriComponentsBuilder.fromUriString(uriTemplate).buildAndExpand(uriVars).encode().toUri(); + return doHandshake(handler, null, uri); } @Override - protected ListenableFuture doHandshakeInternal(WebSocketHandler handler, - HttpHeaders handshakeHeaders, URI url, List protocols, - List extensions, Map attributes) { + public final ListenableFuture doHandshake(WebSocketHandler handler, + WebSocketHttpHeaders headers, URI url) { + + Assert.notNull(handler, "'webSocketHandler' is required"); + Assert.notNull(url, "'url' is required"); + + String scheme = url.getScheme(); + Assert.isTrue(scheme != null && ("ws".equals(scheme) || "wss".equals(scheme) || + "http".equals(scheme) || "https".equals(scheme)), "Invalid scheme: " + scheme); SettableListenableFuture connectFuture = new SettableListenableFuture(); try { SockJsUrlInfo sockJsUrlInfo = new SockJsUrlInfo(url); ServerInfo serverInfo = getServerInfo(sockJsUrlInfo); - createRequest(sockJsUrlInfo, handshakeHeaders, serverInfo).connect(handler, connectFuture); + createRequest(sockJsUrlInfo, headers, serverInfo).connect(handler, connectFuture); } catch (Throwable exception) { if (logger.isErrorEnabled()) {