Undertow-related polishing
This commit is contained in:
@@ -16,6 +16,16 @@
|
|||||||
|
|
||||||
package org.springframework.web.socket.server.standard;
|
package org.springframework.web.socket.server.standard;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import javax.websocket.Decoder;
|
||||||
|
import javax.websocket.Encoder;
|
||||||
|
import javax.websocket.Endpoint;
|
||||||
|
import javax.websocket.Extension;
|
||||||
|
|
||||||
import io.undertow.server.HttpServerExchange;
|
import io.undertow.server.HttpServerExchange;
|
||||||
import io.undertow.server.HttpUpgradeListener;
|
import io.undertow.server.HttpUpgradeListener;
|
||||||
import io.undertow.servlet.api.InstanceFactory;
|
import io.undertow.servlet.api.InstanceFactory;
|
||||||
@@ -31,18 +41,11 @@ import io.undertow.websockets.jsr.EncodingFactory;
|
|||||||
import io.undertow.websockets.jsr.EndpointSessionHandler;
|
import io.undertow.websockets.jsr.EndpointSessionHandler;
|
||||||
import io.undertow.websockets.jsr.ServerWebSocketContainer;
|
import io.undertow.websockets.jsr.ServerWebSocketContainer;
|
||||||
import io.undertow.websockets.jsr.handshake.HandshakeUtil;
|
import io.undertow.websockets.jsr.handshake.HandshakeUtil;
|
||||||
|
import org.xnio.StreamConnection;
|
||||||
|
|
||||||
import org.springframework.http.server.ServerHttpRequest;
|
import org.springframework.http.server.ServerHttpRequest;
|
||||||
import org.springframework.http.server.ServerHttpResponse;
|
import org.springframework.http.server.ServerHttpResponse;
|
||||||
import org.springframework.web.socket.server.HandshakeFailureException;
|
import org.springframework.web.socket.server.HandshakeFailureException;
|
||||||
import org.xnio.StreamConnection;
|
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
|
||||||
import javax.websocket.Decoder;
|
|
||||||
import javax.websocket.Encoder;
|
|
||||||
import javax.websocket.Endpoint;
|
|
||||||
import javax.websocket.Extension;
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -60,13 +63,13 @@ public class UndertowRequestUpgradeStrategy extends AbstractStandardUpgradeStrat
|
|||||||
|
|
||||||
|
|
||||||
public UndertowRequestUpgradeStrategy() {
|
public UndertowRequestUpgradeStrategy() {
|
||||||
this.handshakes = new Handshake[] { new Hybi13Handshake(), new Hybi08Handshake(), new Hybi07Handshake() };
|
this.handshakes = new Handshake[] {new Hybi13Handshake(), new Hybi08Handshake(), new Hybi07Handshake()};
|
||||||
this.supportedVersions = initSupportedVersions(this.handshakes);
|
this.supportedVersions = initSupportedVersions(this.handshakes);
|
||||||
}
|
}
|
||||||
|
|
||||||
private String[] initSupportedVersions(Handshake[] handshakes) {
|
private String[] initSupportedVersions(Handshake[] handshakes) {
|
||||||
String[] versions = new String[handshakes.length];
|
String[] versions = new String[handshakes.length];
|
||||||
for (int i=0; i < versions.length; i++) {
|
for (int i = 0; i < versions.length; i++) {
|
||||||
versions[i] = handshakes[i].getVersion().toHttpHeaderValue();
|
versions[i] = handshakes[i].getVersion().toHttpHeaderValue();
|
||||||
}
|
}
|
||||||
return versions;
|
return versions;
|
||||||
@@ -125,8 +128,7 @@ public class UndertowRequestUpgradeStrategy extends AbstractStandardUpgradeStrat
|
|||||||
endpointRegistration.setSubprotocols(Arrays.asList(selectedProtocol));
|
endpointRegistration.setSubprotocols(Arrays.asList(selectedProtocol));
|
||||||
endpointRegistration.setExtensions(selectedExtensions);
|
endpointRegistration.setExtensions(selectedExtensions);
|
||||||
|
|
||||||
return new ConfiguredServerEndpoint(endpointRegistration,
|
return new ConfiguredServerEndpoint(endpointRegistration, new EndpointInstanceFactory(endpoint), null,
|
||||||
new EndpointInstanceFactory(endpoint), null,
|
|
||||||
new EncodingFactory(
|
new EncodingFactory(
|
||||||
Collections.<Class<?>, List<InstanceFactory<? extends Encoder>>>emptyMap(),
|
Collections.<Class<?>, List<InstanceFactory<? extends Encoder>>>emptyMap(),
|
||||||
Collections.<Class<?>, List<InstanceFactory<? extends Decoder>>>emptyMap(),
|
Collections.<Class<?>, List<InstanceFactory<? extends Decoder>>>emptyMap(),
|
||||||
@@ -145,7 +147,6 @@ public class UndertowRequestUpgradeStrategy extends AbstractStandardUpgradeStrat
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InstanceHandle<Endpoint> createInstance() throws InstantiationException {
|
public InstanceHandle<Endpoint> createInstance() throws InstantiationException {
|
||||||
|
|
||||||
return new InstanceHandle<Endpoint>() {
|
return new InstanceHandle<Endpoint>() {
|
||||||
@Override
|
@Override
|
||||||
public Endpoint getInstance() {
|
public Endpoint getInstance() {
|
||||||
|
|||||||
@@ -23,17 +23,18 @@ import java.util.Arrays;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.junit.runners.Parameterized;
|
import org.junit.runners.Parameterized;
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
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.client.jetty.JettyWebSocketClient;
|
||||||
import org.springframework.web.socket.server.support.DefaultHandshakeHandler;
|
import org.springframework.web.socket.client.standard.StandardWebSocketClient;
|
||||||
import org.springframework.web.socket.config.annotation.EnableWebSocket;
|
import org.springframework.web.socket.config.annotation.EnableWebSocket;
|
||||||
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
|
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
|
||||||
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
|
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
|
||||||
|
import org.springframework.web.socket.handler.AbstractWebSocketHandler;
|
||||||
|
import org.springframework.web.socket.handler.TextWebSocketHandler;
|
||||||
|
import org.springframework.web.socket.server.support.DefaultHandshakeHandler;
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
@@ -47,22 +48,21 @@ public class WebSocketIntegrationTests extends AbstractWebSocketIntegrationTest
|
|||||||
|
|
||||||
@Parameterized.Parameters
|
@Parameterized.Parameters
|
||||||
public static Iterable<Object[]> arguments() {
|
public static Iterable<Object[]> arguments() {
|
||||||
return Arrays.asList(new Object[][]{
|
return Arrays.asList(new Object[][] {
|
||||||
{new JettyWebSocketTestServer(), new JettyWebSocketClient()},
|
{new JettyWebSocketTestServer(), new JettyWebSocketClient()},
|
||||||
{new TomcatWebSocketTestServer(), new StandardWebSocketClient()},
|
{new TomcatWebSocketTestServer(), new StandardWebSocketClient()},
|
||||||
{new UndertowTestServer(), new JettyWebSocketClient()}
|
{new UndertowTestServer(), new JettyWebSocketClient()}
|
||||||
});
|
});
|
||||||
};
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Class<?>[] getAnnotatedConfigClasses() {
|
protected Class<?>[] getAnnotatedConfigClasses() {
|
||||||
return new Class<?>[] { TestWebSocketConfigurer.class };
|
return new Class<?>[] {TestWebSocketConfigurer.class};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void subProtocolNegotiation() throws Exception {
|
public void subProtocolNegotiation() throws Exception {
|
||||||
|
|
||||||
WebSocketHttpHeaders headers = new WebSocketHttpHeaders();
|
WebSocketHttpHeaders headers = new WebSocketHttpHeaders();
|
||||||
headers.setSecWebSocketProtocol("foo");
|
headers.setSecWebSocketProtocol("foo");
|
||||||
|
|
||||||
@@ -78,7 +78,7 @@ public class WebSocketIntegrationTests extends AbstractWebSocketIntegrationTest
|
|||||||
static class TestWebSocketConfigurer implements WebSocketConfigurer {
|
static class TestWebSocketConfigurer implements WebSocketConfigurer {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private DefaultHandshakeHandler handshakeHandler; // can't rely on classpath for server detection
|
private DefaultHandshakeHandler handshakeHandler; // can't rely on classpath for server detection
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
|
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
|
||||||
@@ -92,6 +92,7 @@ public class WebSocketIntegrationTests extends AbstractWebSocketIntegrationTest
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static class TestServerWebSocketHandler extends TextWebSocketHandler {
|
private static class TestServerWebSocketHandler extends TextWebSocketHandler {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user