Clean up warnings and polishing

This commit is contained in:
Sam Brannen
2022-07-31 14:14:56 +03:00
parent 9d1e9703ae
commit e4395f2f8b
55 changed files with 412 additions and 396 deletions

View File

@@ -18,7 +18,6 @@ package org.springframework.web.socket.client;
import java.net.URI;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -30,7 +29,6 @@ import org.apache.commons.logging.LogFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.concurrent.ListenableFuture;
import org.springframework.web.socket.WebSocketExtension;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.WebSocketHttpHeaders;
@@ -45,19 +43,16 @@ import org.springframework.web.util.UriComponentsBuilder;
*/
public abstract class AbstractWebSocketClient implements WebSocketClient {
private static final Set<String> specialHeaders = new HashSet<>();
static {
specialHeaders.add("cache-control");
specialHeaders.add("connection");
specialHeaders.add("host");
specialHeaders.add("sec-websocket-extensions");
specialHeaders.add("sec-websocket-key");
specialHeaders.add("sec-websocket-protocol");
specialHeaders.add("sec-websocket-version");
specialHeaders.add("pragma");
specialHeaders.add("upgrade");
}
private static final Set<String> specialHeaders = Set.of(
"cache-control",
"connection",
"host",
"sec-websocket-extensions",
"sec-websocket-key",
"sec-websocket-protocol",
"sec-websocket-version",
"pragma",
"upgrade");
protected final Log logger = LogFactory.getLog(getClass());
@@ -119,13 +114,14 @@ public abstract class AbstractWebSocketClient implements WebSocketClient {
* @param extensions requested WebSocket extensions, or an empty list
* @param attributes the attributes to associate with the WebSocketSession, i.e. via
* {@link WebSocketSession#getAttributes()}; currently always an empty map.
* @return the established WebSocket session wrapped in a ListenableFuture.
* @return the established WebSocket session wrapped in a {@code ListenableFuture}.
* @deprecated as of 6.0, in favor of {@link #executeInternal(WebSocketHandler, HttpHeaders, URI, List, List, Map)}
*/
@Deprecated
protected ListenableFuture<WebSocketSession> doHandshakeInternal(WebSocketHandler webSocketHandler,
HttpHeaders headers, URI uri, List<String> subProtocols, List<WebSocketExtension> extensions,
Map<String, Object> attributes) {
protected org.springframework.util.concurrent.ListenableFuture<WebSocketSession> doHandshakeInternal(
WebSocketHandler webSocketHandler, HttpHeaders headers, URI uri, List<String> subProtocols,
List<WebSocketExtension> extensions, Map<String, Object> attributes) {
throw new UnsupportedOperationException("doHandshakeInternal is deprecated in favor of executeInternal");
}
@@ -138,8 +134,8 @@ public abstract class AbstractWebSocketClient implements WebSocketClient {
* @param subProtocols requested sub-protocols, or an empty list
* @param extensions requested WebSocket extensions, or an empty list
* @param attributes the attributes to associate with the WebSocketSession, i.e. via
* {@link WebSocketSession#getAttributes()}; currently always an empty map.
* @return the established WebSocket session wrapped in a ListenableFuture.
* {@link WebSocketSession#getAttributes()}; currently always an empty map
* @return the established WebSocket session wrapped in a {@code CompletableFuture}.
*/
protected abstract CompletableFuture<WebSocketSession> executeInternal(WebSocketHandler webSocketHandler,
HttpHeaders headers, URI uri, List<String> subProtocols, List<WebSocketExtension> extensions,

View File

@@ -20,8 +20,6 @@ import java.net.URI;
import java.util.concurrent.CompletableFuture;
import org.springframework.lang.Nullable;
import org.springframework.util.concurrent.CompletableToListenableFutureAdapter;
import org.springframework.util.concurrent.ListenableFuture;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.WebSocketHttpHeaders;
import org.springframework.web.socket.WebSocketSession;
@@ -47,9 +45,10 @@ public interface WebSocketClient {
* @deprecated as of 6.0, in favor of {@link #execute(WebSocketHandler, String, Object...)}
*/
@Deprecated
default ListenableFuture<WebSocketSession> doHandshake(WebSocketHandler webSocketHandler,
String uriTemplate, Object... uriVariables) {
return new CompletableToListenableFutureAdapter<>(execute(webSocketHandler, uriTemplate, uriVariables));
default org.springframework.util.concurrent.ListenableFuture<WebSocketSession> doHandshake(
WebSocketHandler webSocketHandler, String uriTemplate, Object... uriVariables) {
return new org.springframework.util.concurrent.CompletableToListenableFutureAdapter<>(
execute(webSocketHandler, uriTemplate, uriVariables));
}
/**
@@ -73,9 +72,10 @@ public interface WebSocketClient {
* @deprecated as of 6.0, in favor of {@link #execute(WebSocketHandler, WebSocketHttpHeaders, URI)}
*/
@Deprecated
default ListenableFuture<WebSocketSession> doHandshake(WebSocketHandler webSocketHandler,
@Nullable WebSocketHttpHeaders headers, URI uri) {
return new CompletableToListenableFutureAdapter<>(execute(webSocketHandler, headers, uri));
default org.springframework.util.concurrent.ListenableFuture<WebSocketSession> doHandshake(
WebSocketHandler webSocketHandler, @Nullable WebSocketHttpHeaders headers, URI uri) {
return new org.springframework.util.concurrent.CompletableToListenableFutureAdapter<>(
execute(webSocketHandler, headers, uri));
}
/**

View File

@@ -30,10 +30,8 @@ import org.eclipse.jetty.websocket.client.ClientUpgradeRequest;
import org.eclipse.jetty.websocket.client.WebSocketClient;
import org.springframework.context.Lifecycle;
import org.springframework.core.task.AsyncListenableTaskExecutor;
import org.springframework.core.task.AsyncTaskExecutor;
import org.springframework.core.task.SimpleAsyncTaskExecutor;
import org.springframework.core.task.TaskExecutor;
import org.springframework.http.HttpHeaders;
import org.springframework.lang.Nullable;
import org.springframework.util.concurrent.FutureUtils;
@@ -84,8 +82,8 @@ public class JettyWebSocketClient extends AbstractWebSocketClient implements Lif
/**
* Set an {@link AsyncListenableTaskExecutor} to use when opening connections.
* If this property is set to {@code null}, calls to any of the
* Set an {@link AsyncTaskExecutor} to use when opening connections.
* <p>If this property is set to {@code null}, calls to any of the
* {@code doHandshake} methods will block until the connection is established.
* <p>By default an instance of {@code SimpleAsyncTaskExecutor} is used.
*/
@@ -94,7 +92,7 @@ public class JettyWebSocketClient extends AbstractWebSocketClient implements Lif
}
/**
* Return the configured {@link TaskExecutor}.
* Return the configured {@link AsyncTaskExecutor}.
*/
@Nullable
public AsyncTaskExecutor getTaskExecutor() {

View File

@@ -36,10 +36,8 @@ import jakarta.websocket.Extension;
import jakarta.websocket.HandshakeResponse;
import jakarta.websocket.WebSocketContainer;
import org.springframework.core.task.AsyncListenableTaskExecutor;
import org.springframework.core.task.AsyncTaskExecutor;
import org.springframework.core.task.SimpleAsyncTaskExecutor;
import org.springframework.core.task.TaskExecutor;
import org.springframework.http.HttpHeaders;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
@@ -109,8 +107,8 @@ public class StandardWebSocketClient extends AbstractWebSocketClient {
}
/**
* Set an {@link AsyncListenableTaskExecutor} to use when opening connections.
* If this property is set to {@code null}, calls to any of the
* Set an {@link AsyncTaskExecutor} to use when opening connections.
* <p>If this property is set to {@code null}, calls to any of the
* {@code doHandshake} methods will block until the connection is established.
* <p>By default, an instance of {@code SimpleAsyncTaskExecutor} is used.
*/
@@ -119,7 +117,7 @@ public class StandardWebSocketClient extends AbstractWebSocketClient {
}
/**
* Return the configured {@link TaskExecutor}.
* Return the configured {@link AsyncTaskExecutor}.
*/
@Nullable
public AsyncTaskExecutor getTaskExecutor() {

View File

@@ -49,8 +49,6 @@ import org.springframework.messaging.tcp.TcpConnectionHandler;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.util.Assert;
import org.springframework.util.MimeTypeUtils;
import org.springframework.util.concurrent.CompletableToListenableFutureAdapter;
import org.springframework.util.concurrent.ListenableFuture;
import org.springframework.web.socket.BinaryMessage;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
@@ -210,12 +208,15 @@ public class WebSocketStompClient extends StompClientSupport implements SmartLif
* @param url the url to connect to
* @param handler the session handler
* @param uriVars the URI variables to expand into the URL
* @return a ListenableFuture for access to the session when ready for use
* @return a {@code ListenableFuture} for access to the session when ready for use
* @deprecated as of 6.0, in favor of {@link #connectAsync(String, StompSessionHandler, Object...)}
*/
@Deprecated
public ListenableFuture<StompSession> connect(String url, StompSessionHandler handler, Object... uriVars) {
return new CompletableToListenableFutureAdapter<>(connectAsync(url, handler, uriVars));
public org.springframework.util.concurrent.ListenableFuture<StompSession> connect(
String url, StompSessionHandler handler, Object... uriVars) {
return new org.springframework.util.concurrent.CompletableToListenableFutureAdapter<>(
connectAsync(url, handler, uriVars));
}
/**
@@ -240,14 +241,15 @@ public class WebSocketStompClient extends StompClientSupport implements SmartLif
* @param handshakeHeaders the headers for the WebSocket handshake
* @param handler the session handler
* @param uriVariables the URI variables to expand into the URL
* @return a ListenableFuture for access to the session when ready for use
* @return a {@code ListenableFuture} for access to the session when ready for use
* @deprecated as of 6.0, in favor of {@link #connectAsync(String, WebSocketHttpHeaders, StompSessionHandler, Object...)}
*/
@Deprecated
public ListenableFuture<StompSession> connect(String url, @Nullable WebSocketHttpHeaders handshakeHeaders,
public org.springframework.util.concurrent.ListenableFuture<StompSession> connect(
String url, @Nullable WebSocketHttpHeaders handshakeHeaders,
StompSessionHandler handler, Object... uriVariables) {
return new CompletableToListenableFutureAdapter<>(
return new org.springframework.util.concurrent.CompletableToListenableFutureAdapter<>(
connectAsync(url, handshakeHeaders, null, handler, uriVariables));
}
@@ -259,7 +261,7 @@ public class WebSocketStompClient extends StompClientSupport implements SmartLif
* @param handshakeHeaders the headers for the WebSocket handshake
* @param handler the session handler
* @param uriVariables the URI variables to expand into the URL
* @return a ListenableFuture for access to the session when ready for use
* @return a {@code ListenableFuture} for access to the session when ready for use
* @since 6.0
*/
public CompletableFuture<StompSession> connectAsync(String url, @Nullable WebSocketHttpHeaders handshakeHeaders,
@@ -278,14 +280,15 @@ public class WebSocketStompClient extends StompClientSupport implements SmartLif
* @param connectHeaders headers for the STOMP CONNECT frame
* @param handler the session handler
* @param uriVariables the URI variables to expand into the URL
* @return a ListenableFuture for access to the session when ready for use
* @return a {@code ListenableFuture} for access to the session when ready for use
* @deprecated as of 6.0, in favor of {@link #connectAsync(String, WebSocketHttpHeaders, StompHeaders, StompSessionHandler, Object...)}
*/
@Deprecated
public ListenableFuture<StompSession> connect(String url, @Nullable WebSocketHttpHeaders handshakeHeaders,
public org.springframework.util.concurrent.ListenableFuture<StompSession> connect(
String url, @Nullable WebSocketHttpHeaders handshakeHeaders,
@Nullable StompHeaders connectHeaders, StompSessionHandler handler, Object... uriVariables) {
return new CompletableToListenableFutureAdapter<>(
return new org.springframework.util.concurrent.CompletableToListenableFutureAdapter<>(
connectAsync(url, handshakeHeaders, connectHeaders, handler, uriVariables));
}
@@ -318,14 +321,15 @@ public class WebSocketStompClient extends StompClientSupport implements SmartLif
* @param handshakeHeaders the headers for the WebSocket handshake
* @param connectHeaders headers for the STOMP CONNECT frame
* @param sessionHandler the STOMP session handler
* @return a ListenableFuture for access to the session when ready for use
* @return a {@code ListenableFuture} for access to the session when ready for use
* @deprecated as of 6.0, in favor of {@link #connectAsync(URI, WebSocketHttpHeaders, StompHeaders, StompSessionHandler)}
*/
@Deprecated
public ListenableFuture<StompSession> connect(URI url, @Nullable WebSocketHttpHeaders handshakeHeaders,
public org.springframework.util.concurrent.ListenableFuture<StompSession> connect(
URI url, @Nullable WebSocketHttpHeaders handshakeHeaders,
@Nullable StompHeaders connectHeaders, StompSessionHandler sessionHandler) {
return new CompletableToListenableFutureAdapter<>(
return new org.springframework.util.concurrent.CompletableToListenableFutureAdapter<>(
connectAsync(url, handshakeHeaders, connectHeaders, sessionHandler));
}

View File

@@ -29,7 +29,6 @@ import org.apache.commons.logging.LogFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.concurrent.SettableListenableFuture;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketHandler;
@@ -40,9 +39,11 @@ import org.springframework.web.socket.sockjs.frame.SockJsMessageCodec;
/**
* Base class for SockJS client implementations of {@link WebSocketSession}.
* Provides processing of incoming SockJS message frames and delegates lifecycle
*
* <p>Provides processing of incoming SockJS message frames and delegates lifecycle
* events and messages to the (application) {@link WebSocketHandler}.
* Sub-classes implement actual send as well as disconnect logic.
*
* <p>Subclasses implement actual send as well as disconnect logic.
*
* @author Rossen Stoyanchev
* @author Juergen Hoeller
@@ -72,7 +73,7 @@ public abstract class AbstractClientSockJsSession implements WebSocketSession {
*/
@Deprecated
protected AbstractClientSockJsSession(TransportRequest request, WebSocketHandler handler,
SettableListenableFuture<WebSocketSession> connectFuture) {
org.springframework.util.concurrent.SettableListenableFuture<WebSocketSession> connectFuture) {
this(request, handler, connectFuture.completable());
}

View File

@@ -29,7 +29,6 @@ import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.lang.Nullable;
import org.springframework.util.concurrent.SettableListenableFuture;
import org.springframework.web.client.HttpServerErrorException;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketHandler;
@@ -112,7 +111,7 @@ public abstract class AbstractXhrTransport implements XhrTransport {
@Deprecated
protected void connectInternal(TransportRequest request, WebSocketHandler handler,
URI receiveUrl, HttpHeaders handshakeHeaders, XhrClientSockJsSession session,
SettableListenableFuture<WebSocketSession> connectFuture) {
org.springframework.util.concurrent.SettableListenableFuture<WebSocketSession> connectFuture) {
throw new UnsupportedOperationException("connectInternal has been deprecated in favor of connectInternal");
}

View File

@@ -33,8 +33,6 @@ import org.springframework.http.HttpHeaders;
import org.springframework.lang.Nullable;
import org.springframework.scheduling.TaskScheduler;
import org.springframework.util.Assert;
import org.springframework.util.concurrent.ListenableFutureCallback;
import org.springframework.util.concurrent.SettableListenableFuture;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.sockjs.SockJsTransportFailureException;
@@ -149,7 +147,9 @@ class DefaultTransportRequest implements TransportRequest {
@Deprecated
public void connect(WebSocketHandler handler, SettableListenableFuture<WebSocketSession> future) {
public void connect(WebSocketHandler handler,
org.springframework.util.concurrent.SettableListenableFuture<WebSocketSession> future) {
if (logger.isTraceEnabled()) {
logger.trace("Starting " + this);
}
@@ -208,15 +208,17 @@ class DefaultTransportRequest implements TransportRequest {
* callback.
*/
@SuppressWarnings("deprecation")
private class ListenableConnectCallback implements ListenableFutureCallback<WebSocketSession>, Runnable {
private class ListenableConnectCallback implements
org.springframework.util.concurrent.ListenableFutureCallback<WebSocketSession>, Runnable {
private final WebSocketHandler handler;
private final SettableListenableFuture<WebSocketSession> future;
private final org.springframework.util.concurrent.SettableListenableFuture<WebSocketSession> future;
private final AtomicBoolean handled = new AtomicBoolean();
public ListenableConnectCallback(WebSocketHandler handler, SettableListenableFuture<WebSocketSession> future) {
public ListenableConnectCallback(WebSocketHandler handler,
org.springframework.util.concurrent.SettableListenableFuture<WebSocketSession> future) {
this.handler = handler;
this.future = future;
}

View File

@@ -19,8 +19,6 @@ package org.springframework.web.socket.sockjs.client;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import org.springframework.util.concurrent.CompletableToListenableFutureAdapter;
import org.springframework.util.concurrent.ListenableFuture;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.sockjs.transport.TransportType;
@@ -34,29 +32,31 @@ import org.springframework.web.socket.sockjs.transport.TransportType;
public interface Transport {
/**
* Return the SockJS transport types that this transport can be used for.
* In particular since from a client perspective there is no difference
* Get the SockJS transport types that this transport can be used for.
* <p>In particular since from a client perspective there is no difference
* between XHR and XHR streaming, an {@code XhrTransport} could do both.
*/
List<TransportType> getTransportTypes();
/**
* Connect the transport.
* @param request the transport request.
* @param webSocketHandler the application handler to delegate lifecycle events to.
* @return a future to indicate success or failure to connect.
* @param request the transport request
* @param webSocketHandler the application handler to delegate lifecycle events to
* @return a future to indicate success or failure to connect
* @deprecated as of 6.0, in favor of {@link #connectAsync(TransportRequest, WebSocketHandler)}
*/
@Deprecated
default ListenableFuture<WebSocketSession> connect(TransportRequest request, WebSocketHandler webSocketHandler) {
return new CompletableToListenableFutureAdapter<>(connectAsync(request, webSocketHandler));
default org.springframework.util.concurrent.ListenableFuture<WebSocketSession> connect(
TransportRequest request, WebSocketHandler webSocketHandler) {
return new org.springframework.util.concurrent.CompletableToListenableFutureAdapter<>(
connectAsync(request, webSocketHandler));
}
/**
* Connect the transport.
* @param request the transport request.
* @param webSocketHandler the application handler to delegate lifecycle events to.
* @return a future to indicate success or failure to connect.
* @param request the transport request
* @param webSocketHandler the application handler to delegate lifecycle events to
* @return a future to indicate success or failure to connect
* @since 6.0
*/
CompletableFuture<WebSocketSession> connectAsync(TransportRequest request, WebSocketHandler webSocketHandler);

View File

@@ -23,7 +23,6 @@ import java.util.concurrent.CompletableFuture;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.concurrent.SettableListenableFuture;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketExtension;
@@ -49,7 +48,7 @@ public class WebSocketClientSockJsSession extends AbstractClientSockJsSession im
*/
@Deprecated
public WebSocketClientSockJsSession(TransportRequest request, WebSocketHandler handler,
SettableListenableFuture<WebSocketSession> connectFuture) {
org.springframework.util.concurrent.SettableListenableFuture<WebSocketSession> connectFuture) {
super(request, handler, connectFuture);
}

View File

@@ -25,7 +25,6 @@ import java.util.concurrent.CompletableFuture;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.util.Assert;
import org.springframework.util.concurrent.SettableListenableFuture;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketExtension;
@@ -56,11 +55,13 @@ public class XhrClientSockJsSession extends AbstractClientSockJsSession {
/**
* Create a new {@code XhrClientSockJsSession}.
* @deprecated as of 6.0, in favor of {@link #XhrClientSockJsSession(TransportRequest, WebSocketHandler, XhrTransport, CompletableFuture)}
* @deprecated as of 6.0, in favor of
* {@link #XhrClientSockJsSession(TransportRequest, WebSocketHandler, XhrTransport, CompletableFuture)}
*/
@Deprecated
public XhrClientSockJsSession(TransportRequest request, WebSocketHandler handler,
XhrTransport transport, SettableListenableFuture<WebSocketSession> connectFuture) {
public XhrClientSockJsSession(
TransportRequest request, WebSocketHandler handler, XhrTransport transport,
org.springframework.util.concurrent.SettableListenableFuture<WebSocketSession> connectFuture) {
super(request, handler, connectFuture);
Assert.notNull(transport, "XhrTransport is required");
@@ -72,6 +73,10 @@ public class XhrClientSockJsSession extends AbstractClientSockJsSession {
this.sendUrl = request.getSockJsUrlInfo().getTransportUrl(TransportType.XHR_SEND);
}
/**
* Create a new {@code XhrClientSockJsSession}.
* @since 6.0
*/
public XhrClientSockJsSession(TransportRequest request, WebSocketHandler handler,
XhrTransport transport, CompletableFuture<WebSocketSession> connectFuture) {

View File

@@ -166,7 +166,7 @@ public abstract class AbstractWebSocketIntegrationTests {
}
@Configuration
@Configuration(proxyBeanMethods = false)
static class JettyUpgradeStrategyConfig extends AbstractRequestUpgradeStrategyConfig {
@Override
@@ -177,7 +177,7 @@ public abstract class AbstractWebSocketIntegrationTests {
}
@Configuration
@Configuration(proxyBeanMethods = false)
static class TomcatUpgradeStrategyConfig extends AbstractRequestUpgradeStrategyConfig {
@Override
@@ -188,7 +188,7 @@ public abstract class AbstractWebSocketIntegrationTests {
}
@Configuration
@Configuration(proxyBeanMethods = false)
static class UndertowUpgradeStrategyConfig extends AbstractRequestUpgradeStrategyConfig {
@Override

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2022 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.
@@ -53,6 +53,7 @@ class WebSocketHandshakeTests extends AbstractWebSocketIntegrationTests {
@ParameterizedWebSocketTest
@SuppressWarnings("deprecation")
void subProtocolNegotiation(WebSocketTestServer server, WebSocketClient webSocketClient, TestInfo testInfo) throws Exception {
super.setup(server, webSocketClient, testInfo);
@@ -65,6 +66,7 @@ class WebSocketHandshakeTests extends AbstractWebSocketIntegrationTests {
}
@ParameterizedWebSocketTest // SPR-12727
@SuppressWarnings("deprecation")
void unsolicitedPongWithEmptyPayload(WebSocketTestServer server, WebSocketClient webSocketClient, TestInfo testInfo) throws Exception {
super.setup(server, webSocketClient, testInfo);

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2022 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.
@@ -68,6 +68,7 @@ public class StandardWebSocketClientTests {
@Test
@SuppressWarnings("deprecation")
public void testGetLocalAddress() throws Exception {
URI uri = new URI("ws://localhost/abc");
WebSocketSession session = this.wsClient.doHandshake(this.wsHandler, this.headers, uri).get();
@@ -77,6 +78,7 @@ public class StandardWebSocketClientTests {
}
@Test
@SuppressWarnings("deprecation")
public void testGetLocalAddressWss() throws Exception {
URI uri = new URI("wss://localhost/abc");
WebSocketSession session = this.wsClient.doHandshake(this.wsHandler, this.headers, uri).get();
@@ -86,6 +88,7 @@ public class StandardWebSocketClientTests {
}
@Test
@SuppressWarnings("deprecation")
public void testGetLocalAddressNoScheme() throws Exception {
URI uri = new URI("localhost/abc");
assertThatIllegalArgumentException().isThrownBy(() ->
@@ -93,6 +96,7 @@ public class StandardWebSocketClientTests {
}
@Test
@SuppressWarnings("deprecation")
public void testGetRemoteAddress() throws Exception {
URI uri = new URI("wss://localhost/abc");
WebSocketSession session = this.wsClient.doHandshake(this.wsHandler, this.headers, uri).get();
@@ -103,8 +107,8 @@ public class StandardWebSocketClientTests {
}
@Test
@SuppressWarnings("deprecation")
public void handshakeHeaders() throws Exception {
URI uri = new URI("ws://localhost/abc");
List<String> protocols = Collections.singletonList("abc");
this.headers.setSecWebSocketProtocol(protocols);
@@ -117,8 +121,8 @@ public class StandardWebSocketClientTests {
}
@Test
@SuppressWarnings("deprecation")
public void clientEndpointConfig() throws Exception {
URI uri = new URI("ws://localhost/abc");
List<String> protocols = Collections.singletonList("abc");
this.headers.setSecWebSocketProtocol(protocols);
@@ -133,8 +137,8 @@ public class StandardWebSocketClientTests {
}
@Test
@SuppressWarnings("deprecation")
public void clientEndpointConfigWithUserProperties() throws Exception {
Map<String,Object> userProperties = Collections.singletonMap("foo", "bar");
URI uri = new URI("ws://localhost/abc");
@@ -149,8 +153,8 @@ public class StandardWebSocketClientTests {
}
@Test
@SuppressWarnings("deprecation")
public void standardWebSocketClientConfiguratorInsertsHandshakeHeaders() throws Exception {
URI uri = new URI("ws://localhost/abc");
this.headers.add("foo", "bar");
@@ -166,8 +170,8 @@ public class StandardWebSocketClientTests {
}
@Test
@SuppressWarnings("deprecation")
public void taskExecutor() throws Exception {
URI uri = new URI("ws://localhost/abc");
this.wsClient.setTaskExecutor(new SimpleAsyncTaskExecutor());
WebSocketSession session = this.wsClient.doHandshake(this.wsHandler, this.headers, uri).get();

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2022 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.
@@ -49,6 +49,7 @@ class WebSocketConfigurationTests extends AbstractWebSocketIntegrationTests {
@ParameterizedWebSocketTest
@SuppressWarnings("deprecation")
void registerWebSocketHandler(WebSocketTestServer server, WebSocketClient webSocketClient, TestInfo testInfo) throws Exception {
super.setup(server, webSocketClient, testInfo);
@@ -62,6 +63,7 @@ class WebSocketConfigurationTests extends AbstractWebSocketIntegrationTests {
}
@ParameterizedWebSocketTest
@SuppressWarnings("deprecation")
void registerWebSocketHandlerWithSockJS(WebSocketTestServer server, WebSocketClient webSocketClient, TestInfo testInfo) throws Exception {
super.setup(server, webSocketClient, testInfo);

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2022 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.
@@ -109,8 +109,8 @@ class WebSocketStompClientIntegrationTests {
@Test
@SuppressWarnings("deprecation")
void publishSubscribe() throws Exception {
String url = "ws://127.0.0.1:" + this.server.getPort() + "/stomp";
TestHandler testHandler = new TestHandler("/topic/foo", "payload");
@@ -121,7 +121,7 @@ class WebSocketStompClientIntegrationTests {
}
@Configuration
@Configuration(proxyBeanMethods = false)
static class TestConfig extends WebSocketMessageBrokerConfigurationSupport {
@Override

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2022 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.
@@ -51,8 +51,6 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.core.testfixture.EnabledForTestGroups;
import org.springframework.http.HttpHeaders;
import org.springframework.http.server.ServletServerHttpRequest;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.util.concurrent.ListenableFutureCallback;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketHttpHeaders;
@@ -79,7 +77,7 @@ import static org.springframework.core.testfixture.TestGroup.LONG_RUNNING;
* @author Sam Brannen
*/
@EnabledForTestGroups(LONG_RUNNING)
public abstract class AbstractSockJsIntegrationTests {
abstract class AbstractSockJsIntegrationTests {
protected Log logger = LogFactory.getLog(getClass());
@@ -96,7 +94,7 @@ public abstract class AbstractSockJsIntegrationTests {
@BeforeEach
public void setup(TestInfo testInfo) throws Exception {
void setup(TestInfo testInfo) throws Exception {
logger.debug("Setting up '" + testInfo.getTestMethod().get().getName() + "'");
this.testFilter = new TestFilter();
@@ -116,7 +114,7 @@ public abstract class AbstractSockJsIntegrationTests {
}
@AfterEach
public void teardown() throws Exception {
void teardown() throws Exception {
try {
this.sockJsClient.stop();
}
@@ -157,17 +155,17 @@ public abstract class AbstractSockJsIntegrationTests {
}
@Test
public void echoWebSocket() throws Exception {
void echoWebSocket() throws Exception {
testEcho(100, createWebSocketTransport(), null);
}
@Test
public void echoXhrStreaming() throws Exception {
void echoXhrStreaming() throws Exception {
testEcho(100, createXhrTransport(), null);
}
@Test
public void echoXhr() throws Exception {
void echoXhr() throws Exception {
AbstractXhrTransport xhrTransport = createXhrTransport();
xhrTransport.setXhrStreamingDisabled(true);
testEcho(100, xhrTransport, null);
@@ -176,7 +174,7 @@ public abstract class AbstractSockJsIntegrationTests {
// SPR-13254
@Test
public void echoXhrWithHeaders() throws Exception {
void echoXhrWithHeaders() throws Exception {
AbstractXhrTransport xhrTransport = createXhrTransport();
xhrTransport.setXhrStreamingDisabled(true);
@@ -191,30 +189,31 @@ public abstract class AbstractSockJsIntegrationTests {
}
@Test
public void receiveOneMessageWebSocket() throws Exception {
void receiveOneMessageWebSocket() throws Exception {
testReceiveOneMessage(createWebSocketTransport(), null);
}
@Test
public void receiveOneMessageXhrStreaming() throws Exception {
void receiveOneMessageXhrStreaming() throws Exception {
testReceiveOneMessage(createXhrTransport(), null);
}
@Test
public void receiveOneMessageXhr() throws Exception {
void receiveOneMessageXhr() throws Exception {
AbstractXhrTransport xhrTransport = createXhrTransport();
xhrTransport.setXhrStreamingDisabled(true);
testReceiveOneMessage(xhrTransport, null);
}
@Test
public void infoRequestFailure() throws Exception {
@SuppressWarnings("deprecation")
void infoRequestFailure() throws Exception {
TestClientHandler handler = new TestClientHandler();
this.testFilter.sendErrorMap.put("/info", 500);
CountDownLatch latch = new CountDownLatch(1);
initSockJsClient(createWebSocketTransport());
this.sockJsClient.doHandshake(handler, this.baseUrl + "/echo").addCallback(
new ListenableFutureCallback<WebSocketSession>() {
new org.springframework.util.concurrent.ListenableFutureCallback<WebSocketSession>() {
@Override
public void onSuccess(WebSocketSession result) {
}
@@ -229,12 +228,12 @@ public abstract class AbstractSockJsIntegrationTests {
}
@Test
public void fallbackAfterTransportFailure() throws Exception {
void fallbackAfterTransportFailure() throws Exception {
this.testFilter.sendErrorMap.put("/websocket", 200);
this.testFilter.sendErrorMap.put("/xhr_streaming", 500);
TestClientHandler handler = new TestClientHandler();
initSockJsClient(createWebSocketTransport(), createXhrTransport());
WebSocketSession session = this.sockJsClient.doHandshake(handler, this.baseUrl + "/echo").get();
WebSocketSession session = this.sockJsClient.execute(handler, this.baseUrl + "/echo").get();
assertThat(session.getClass()).as("Fallback didn't occur").isEqualTo(XhrClientSockJsSession.class);
TextMessage message = new TextMessage("message1");
session.sendMessage(message);
@@ -243,12 +242,13 @@ public abstract class AbstractSockJsIntegrationTests {
@Test
@Timeout(5)
public void fallbackAfterConnectTimeout() throws Exception {
@SuppressWarnings("deprecation")
void fallbackAfterConnectTimeout() throws Exception {
TestClientHandler clientHandler = new TestClientHandler();
this.testFilter.sleepDelayMap.put("/xhr_streaming", 10000L);
this.testFilter.sendErrorMap.put("/xhr_streaming", 503);
initSockJsClient(createXhrTransport());
this.sockJsClient.setConnectTimeoutScheduler(this.wac.getBean(ThreadPoolTaskScheduler.class));
// this.sockJsClient.setConnectTimeoutScheduler(this.wac.getBean(ThreadPoolTaskScheduler.class));
WebSocketSession clientSession = sockJsClient.doHandshake(clientHandler, this.baseUrl + "/echo").get();
assertThat(clientSession.getClass()).as("Fallback didn't occur").isEqualTo(XhrClientSockJsSession.class);
TextMessage message = new TextMessage("message1");
@@ -258,6 +258,7 @@ public abstract class AbstractSockJsIntegrationTests {
}
@SuppressWarnings("deprecation")
private void testEcho(int messageCount, Transport transport, WebSocketHttpHeaders headers) throws Exception {
List<TextMessage> messages = new ArrayList<>();
for (int i = 0; i < messageCount; i++) {
@@ -278,6 +279,7 @@ public abstract class AbstractSockJsIntegrationTests {
session.close();
}
@SuppressWarnings("deprecation")
private void testReceiveOneMessage(Transport transport, WebSocketHttpHeaders headers)
throws Exception {
@@ -311,7 +313,7 @@ public abstract class AbstractSockJsIntegrationTests {
}
@Configuration
@Configuration(proxyBeanMethods = false)
@EnableWebSocket
static class TestConfig implements WebSocketConfigurer {

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2015 the original author or authors.
* Copyright 2002-2022 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.
@@ -30,7 +30,7 @@ import org.springframework.web.socket.server.jetty.JettyRequestUpgradeStrategy;
*
* @author Rossen Stoyanchev
*/
public class JettySockJsIntegrationTests extends AbstractSockJsIntegrationTests {
class JettySockJsIntegrationTests extends AbstractSockJsIntegrationTests {
@Override
protected Class<?> upgradeStrategyConfigClass() {
@@ -53,10 +53,10 @@ public class JettySockJsIntegrationTests extends AbstractSockJsIntegrationTests
}
@Configuration
@Configuration(proxyBeanMethods = false)
static class JettyTestConfig {
@Bean
public RequestUpgradeStrategy upgradeStrategy() {
RequestUpgradeStrategy upgradeStrategy() {
return new JettyRequestUpgradeStrategy();
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2022 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.
@@ -40,8 +40,6 @@ import org.springframework.messaging.simp.stomp.StompCommand;
import org.springframework.messaging.simp.stomp.StompEncoder;
import org.springframework.messaging.simp.stomp.StompHeaderAccessor;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.util.concurrent.ListenableFuture;
import org.springframework.util.concurrent.ListenableFutureCallback;
import org.springframework.web.client.HttpServerErrorException;
import org.springframework.web.client.RequestCallback;
import org.springframework.web.client.ResponseExtractor;
@@ -124,6 +122,7 @@ public class RestTemplateXhrTransportTests {
}
@Test
@SuppressWarnings("deprecation")
public void connectFailure() throws Exception {
final HttpServerErrorException expected = new HttpServerErrorException(HttpStatus.INTERNAL_SERVER_ERROR);
RestOperations restTemplate = mock(RestOperations.class);
@@ -131,7 +130,7 @@ public class RestTemplateXhrTransportTests {
final CountDownLatch latch = new CountDownLatch(1);
connect(restTemplate).addCallback(
new ListenableFutureCallback<WebSocketSession>() {
new org.springframework.util.concurrent.ListenableFutureCallback<WebSocketSession>() {
@Override
public void onSuccess(WebSocketSession result) {
}
@@ -168,12 +167,15 @@ public class RestTemplateXhrTransportTests {
verify(response).close();
}
private ListenableFuture<WebSocketSession> connect(ClientHttpResponse... responses) throws Exception {
@SuppressWarnings("deprecation")
private org.springframework.util.concurrent.ListenableFuture<WebSocketSession> connect(
ClientHttpResponse... responses) throws Exception {
return connect(new TestRestTemplate(responses));
}
private ListenableFuture<WebSocketSession> connect(RestOperations restTemplate, ClientHttpResponse... responses)
throws Exception {
@SuppressWarnings("deprecation")
private org.springframework.util.concurrent.ListenableFuture<WebSocketSession> connect(
RestOperations restTemplate, ClientHttpResponse... responses) throws Exception {
RestTemplateXhrTransport transport = new RestTemplateXhrTransport(restTemplate);
transport.setTaskExecutor(new SyncTaskExecutor());
@@ -201,7 +203,6 @@ public class RestTemplateXhrTransportTests {
}
private static class TestRestTemplate extends RestTemplate {
private Queue<ClientHttpResponse> responses = new LinkedBlockingDeque<>();
@@ -225,5 +226,4 @@ public class RestTemplateXhrTransportTests {
}
}
}

View File

@@ -18,7 +18,6 @@ package org.springframework.web.socket.sockjs.client;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
import org.junit.jupiter.api.BeforeEach;
@@ -27,7 +26,6 @@ import org.mockito.ArgumentCaptor;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.util.concurrent.ListenableFutureCallback;
import org.springframework.web.client.HttpServerErrorException;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.WebSocketHttpHeaders;
@@ -43,46 +41,38 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
/**
* Unit tests for {@link org.springframework.web.socket.sockjs.client.SockJsClient}.
* Unit tests for {@link SockJsClient}.
*
* @author Rossen Stoyanchev
*/
public class SockJsClientTests {
class SockJsClientTests {
private static final String URL = "https://example.com";
private static final WebSocketHandler handler = mock(WebSocketHandler.class);
private SockJsClient sockJsClient;
private final InfoReceiver infoReceiver = mock(InfoReceiver.class);
private InfoReceiver infoReceiver;
private final TestTransport webSocketTransport = new TestTransport("WebSocketTestTransport");
private TestTransport webSocketTransport;
private final XhrTestTransport xhrTransport = new XhrTestTransport("XhrTestTransport");
private XhrTestTransport xhrTransport;
@SuppressWarnings({ "deprecation", "unchecked" })
private org.springframework.util.concurrent.ListenableFutureCallback<WebSocketSession> connectCallback =
mock(org.springframework.util.concurrent.ListenableFutureCallback.class);
private ListenableFutureCallback<WebSocketSession> connectCallback;
private SockJsClient sockJsClient = new SockJsClient(List.of(this.webSocketTransport, this.xhrTransport));
@BeforeEach
@SuppressWarnings("unchecked")
public void setup() {
this.infoReceiver = mock(InfoReceiver.class);
this.webSocketTransport = new TestTransport("WebSocketTestTransport");
this.xhrTransport = new XhrTestTransport("XhrTestTransport");
List<Transport> transports = new ArrayList<>();
transports.add(this.webSocketTransport);
transports.add(this.xhrTransport);
this.sockJsClient = new SockJsClient(transports);
void setup() {
this.sockJsClient.setInfoReceiver(this.infoReceiver);
this.connectCallback = mock(ListenableFutureCallback.class);
}
@Test
public void connectWebSocket() throws Exception {
@SuppressWarnings("deprecation")
void connectWebSocket() throws Exception {
setupInfoRequest(true);
this.sockJsClient.doHandshake(handler, URL).addCallback(this.connectCallback);
assertThat(this.webSocketTransport.invoked()).isTrue();
@@ -93,7 +83,8 @@ public class SockJsClientTests {
}
@Test
public void connectWebSocketDisabled() throws URISyntaxException {
@SuppressWarnings("deprecation")
void connectWebSocketDisabled() throws URISyntaxException {
setupInfoRequest(false);
this.sockJsClient.doHandshake(handler, URL);
assertThat(this.webSocketTransport.invoked()).isFalse();
@@ -102,7 +93,8 @@ public class SockJsClientTests {
}
@Test
public void connectXhrStreamingDisabled() throws Exception {
@SuppressWarnings("deprecation")
void connectXhrStreamingDisabled() throws Exception {
setupInfoRequest(false);
this.xhrTransport.setStreamingDisabled(true);
this.sockJsClient.doHandshake(handler, URL).addCallback(this.connectCallback);
@@ -111,10 +103,9 @@ public class SockJsClientTests {
assertThat(this.xhrTransport.getRequest().getTransportUrl().toString().endsWith("xhr")).isTrue();
}
// SPR-13254
@Test
public void connectWithHandshakeHeaders() throws Exception {
@Test // SPR-13254
@SuppressWarnings("deprecation")
void connectWithHandshakeHeaders() throws Exception {
ArgumentCaptor<HttpHeaders> headersCaptor = setupInfoRequest(false);
this.xhrTransport.setStreamingDisabled(true);
@@ -135,7 +126,8 @@ public class SockJsClientTests {
}
@Test
public void connectAndUseSubsetOfHandshakeHeadersForHttpRequests() throws Exception {
@SuppressWarnings("deprecation")
void connectAndUseSubsetOfHandshakeHeadersForHttpRequests() throws Exception {
ArgumentCaptor<HttpHeaders> headersCaptor = setupInfoRequest(false);
this.xhrTransport.setStreamingDisabled(true);
@@ -152,14 +144,16 @@ public class SockJsClientTests {
}
@Test
public void connectSockJsInfo() throws Exception {
@SuppressWarnings("deprecation")
void connectSockJsInfo() throws Exception {
setupInfoRequest(true);
this.sockJsClient.doHandshake(handler, URL);
verify(this.infoReceiver, times(1)).executeInfoRequest(any(), any());
}
@Test
public void connectSockJsInfoCached() throws Exception {
@SuppressWarnings("deprecation")
void connectSockJsInfoCached() throws Exception {
setupInfoRequest(true);
this.sockJsClient.doHandshake(handler, URL);
this.sockJsClient.doHandshake(handler, URL);
@@ -168,7 +162,8 @@ public class SockJsClientTests {
}
@Test
public void connectInfoRequestFailure() throws URISyntaxException {
@SuppressWarnings("deprecation")
void connectInfoRequestFailure() throws URISyntaxException {
HttpServerErrorException exception = new HttpServerErrorException(HttpStatus.SERVICE_UNAVAILABLE);
given(this.infoReceiver.executeInfoRequest(any(), any())).willThrow(exception);
this.sockJsClient.doHandshake(handler, URL).addCallback(this.connectCallback);
@@ -178,12 +173,15 @@ public class SockJsClientTests {
}
private ArgumentCaptor<HttpHeaders> setupInfoRequest(boolean webSocketEnabled) {
String response = """
{
"entropy": 123,
"origins": ["*:*"],
"cookie_needed": true,
"websocket": %s
}""".formatted(webSocketEnabled).replace('\n', '\0');
ArgumentCaptor<HttpHeaders> headersCaptor = ArgumentCaptor.forClass(HttpHeaders.class);
given(this.infoReceiver.executeInfoRequest(any(), headersCaptor.capture())).willReturn(
"{\"entropy\":123," +
"\"origins\":[\"*:*\"]," +
"\"cookie_needed\":true," +
"\"websocket\":" + webSocketEnabled + "}");
given(this.infoReceiver.executeInfoRequest(any(), headersCaptor.capture())).willReturn(response);
return headersCaptor;
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2019 the original author or authors.
* Copyright 2002-2022 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.
@@ -29,7 +29,7 @@ import org.springframework.web.socket.server.standard.UndertowRequestUpgradeStra
/**
* @author Brian Clozel
*/
public class UndertowSockJsIntegrationTests extends AbstractSockJsIntegrationTests {
class UndertowSockJsIntegrationTests extends AbstractSockJsIntegrationTests {
@Override
protected Class<?> upgradeStrategyConfigClass() {
@@ -56,11 +56,13 @@ public class UndertowSockJsIntegrationTests extends AbstractSockJsIntegrationTes
}
}
@Configuration
@Configuration(proxyBeanMethods = false)
static class UndertowTestConfig {
@Bean
public RequestUpgradeStrategy upgradeStrategy() {
RequestUpgradeStrategy upgradeStrategy() {
return new UndertowRequestUpgradeStrategy();
}
}
}

View File

@@ -39,22 +39,21 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
/**
* Unit tests for
* {@link org.springframework.web.socket.sockjs.client.AbstractXhrTransport}.
* Unit tests for {@link AbstractXhrTransport}.
*
* @author Rossen Stoyanchev
*/
public class XhrTransportTests {
class XhrTransportTests {
@Test
public void infoResponse() throws Exception {
void infoResponse() throws Exception {
TestXhrTransport transport = new TestXhrTransport();
transport.infoResponseToReturn = new ResponseEntity<>("body", HttpStatus.OK);
assertThat(transport.executeInfoRequest(new URI("https://example.com/info"), null)).isEqualTo("body");
}
@Test
public void infoResponseError() throws Exception {
void infoResponseError() throws Exception {
TestXhrTransport transport = new TestXhrTransport();
transport.infoResponseToReturn = new ResponseEntity<>("body", HttpStatus.BAD_REQUEST);
assertThatExceptionOfType(HttpServerErrorException.class).isThrownBy(() ->
@@ -62,7 +61,7 @@ public class XhrTransportTests {
}
@Test
public void sendMessage() throws Exception {
void sendMessage() throws Exception {
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.set("foo", "bar");
requestHeaders.setContentType(MediaType.APPLICATION_JSON);
@@ -76,7 +75,7 @@ public class XhrTransportTests {
}
@Test
public void sendMessageError() throws Exception {
void sendMessageError() throws Exception {
TestXhrTransport transport = new TestXhrTransport();
transport.sendMessageResponseToReturn = new ResponseEntity<>(HttpStatus.BAD_REQUEST);
URI url = new URI("https://example.com");
@@ -85,7 +84,8 @@ public class XhrTransportTests {
}
@Test
public void connect() throws Exception {
@SuppressWarnings("deprecation")
void connect() throws Exception {
HttpHeaders handshakeHeaders = new HttpHeaders();
handshakeHeaders.setOrigin("foo");