Fix configuration issues in DefaultSockJsService
This commit is contained in:
parent
01feae0ad5
commit
9925d8385f
|
|
@ -87,13 +87,8 @@ public class WebSocketHttpRequestHandler implements HttpRequestHandler {
|
|||
ServerHttpRequest httpRequest = new ServletServerHttpRequest(request);
|
||||
ServerHttpResponse httpResponse = new ServletServerHttpResponse(response);
|
||||
|
||||
try {
|
||||
this.handshakeHandler.doHandshake(httpRequest, httpResponse, this.webSocketHandler);
|
||||
httpResponse.flush();
|
||||
}
|
||||
catch (IOException ex) {
|
||||
throw ex;
|
||||
}
|
||||
this.handshakeHandler.doHandshake(httpRequest, httpResponse, this.webSocketHandler);
|
||||
httpResponse.flush();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@ import org.springframework.web.socket.sockjs.SockJsException;
|
|||
import org.springframework.web.socket.sockjs.SockJsService;
|
||||
import org.springframework.web.socket.sockjs.support.AbstractSockJsService;
|
||||
import org.springframework.web.socket.sockjs.support.frame.Jackson2SockJsMessageCodec;
|
||||
import org.springframework.web.socket.sockjs.support.frame.JacksonSockJsMessageCodec;
|
||||
import org.springframework.web.socket.sockjs.support.frame.SockJsMessageCodec;
|
||||
import org.springframework.web.socket.sockjs.transport.TransportHandler;
|
||||
import org.springframework.web.socket.sockjs.transport.TransportType;
|
||||
|
|
@ -88,18 +89,7 @@ public class DefaultSockJsService extends AbstractSockJsService {
|
|||
* application stops.
|
||||
*/
|
||||
public DefaultSockJsService(TaskScheduler taskScheduler) {
|
||||
super(taskScheduler);
|
||||
addTransportHandlers(getDefaultTransportHandlers());
|
||||
initMessageCodec();
|
||||
}
|
||||
|
||||
protected void initMessageCodec() {
|
||||
if (jackson2Present) {
|
||||
this.messageCodec = new Jackson2SockJsMessageCodec();
|
||||
}
|
||||
else if (jacksonPresent) {
|
||||
this.messageCodec = new Jackson2SockJsMessageCodec();
|
||||
}
|
||||
this(taskScheduler, null);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -111,7 +101,7 @@ public class DefaultSockJsService extends AbstractSockJsService {
|
|||
* Spring bean to ensure it is initialized at start up and shut down when the
|
||||
* application stops.
|
||||
* @param transportHandlers the transport handlers to use (replaces the default ones);
|
||||
* can be {@code null}.
|
||||
* can be {@code null} if you don't want to install the default ones.
|
||||
* @param transportHandlerOverrides zero or more overrides to the default transport
|
||||
* handler types.
|
||||
*/
|
||||
|
|
@ -122,9 +112,13 @@ public class DefaultSockJsService extends AbstractSockJsService {
|
|||
|
||||
initMessageCodec();
|
||||
|
||||
if (!CollectionUtils.isEmpty(transportHandlers)) {
|
||||
if (CollectionUtils.isEmpty(transportHandlers)) {
|
||||
addTransportHandlers(getDefaultTransportHandlers());
|
||||
}
|
||||
else {
|
||||
addTransportHandlers(transportHandlers);
|
||||
}
|
||||
|
||||
if (!ObjectUtils.isEmpty(transportHandlerOverrides)) {
|
||||
addTransportHandlers(Arrays.asList(transportHandlerOverrides));
|
||||
}
|
||||
|
|
@ -134,13 +128,21 @@ public class DefaultSockJsService extends AbstractSockJsService {
|
|||
}
|
||||
}
|
||||
|
||||
private void initMessageCodec() {
|
||||
if (jackson2Present) {
|
||||
this.messageCodec = new Jackson2SockJsMessageCodec();
|
||||
}
|
||||
else if (jacksonPresent) {
|
||||
this.messageCodec = new JacksonSockJsMessageCodec();
|
||||
}
|
||||
}
|
||||
|
||||
protected final Set<TransportHandler> getDefaultTransportHandlers() {
|
||||
Set<TransportHandler> result = new HashSet<TransportHandler>();
|
||||
result.add(new XhrPollingTransportHandler());
|
||||
result.add(new XhrTransportHandler());
|
||||
result.add(new XhrReceivingTransportHandler());
|
||||
result.add(new JsonpPollingTransportHandler());
|
||||
result.add(new JsonpTransportHandler());
|
||||
result.add(new JsonpReceivingTransportHandler());
|
||||
result.add(new XhrStreamingTransportHandler());
|
||||
result.add(new EventSourceTransportHandler());
|
||||
result.add(new HtmlFileTransportHandler());
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ import org.springframework.web.socket.sockjs.transport.session.AbstractHttpSockJ
|
|||
*
|
||||
* @author Rossen Stoyanchev
|
||||
*/
|
||||
public class JsonpTransportHandler extends AbstractHttpReceivingTransportHandler {
|
||||
public class JsonpReceivingTransportHandler extends AbstractHttpReceivingTransportHandler {
|
||||
|
||||
private final FormHttpMessageConverter formConverter = new FormHttpMessageConverter();
|
||||
|
||||
|
|
@ -28,7 +28,7 @@ import org.springframework.web.socket.sockjs.transport.TransportType;
|
|||
*
|
||||
* @author Rossen Stoyanchev
|
||||
*/
|
||||
public class XhrTransportHandler extends AbstractHttpReceivingTransportHandler {
|
||||
public class XhrReceivingTransportHandler extends AbstractHttpReceivingTransportHandler {
|
||||
|
||||
|
||||
@Override
|
||||
|
|
@ -17,6 +17,7 @@
|
|||
package org.springframework.web.socket.sockjs.transport.handler;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.junit.Before;
|
||||
|
|
@ -97,6 +98,30 @@ public class DefaultSockJsServiceTests extends AbstractHttpRequestTests {
|
|||
assertNotNull(handlers.get(TransportType.EVENT_SOURCE));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void defaultTransportHandlersWithOverride() {
|
||||
|
||||
XhrReceivingTransportHandler xhrHandler = new XhrReceivingTransportHandler();
|
||||
|
||||
DefaultSockJsService service = new DefaultSockJsService(mock(TaskScheduler.class), null, xhrHandler);
|
||||
Map<TransportType, TransportHandler> handlers = service.getTransportHandlers();
|
||||
|
||||
assertEquals(8, handlers.size());
|
||||
assertSame(xhrHandler, handlers.get(xhrHandler.getTransportType()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void customizedTransportHandlerList() {
|
||||
|
||||
List<TransportHandler> handlers = Arrays.<TransportHandler>asList(
|
||||
new XhrPollingTransportHandler(), new XhrReceivingTransportHandler());
|
||||
|
||||
DefaultSockJsService service = new DefaultSockJsService(mock(TaskScheduler.class), handlers);
|
||||
Map<TransportType, TransportHandler> actualHandlers = service.getTransportHandlers();
|
||||
|
||||
assertEquals(handlers.size(), actualHandlers.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleTransportRequestXhr() throws Exception {
|
||||
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ import static org.mockito.Mockito.*;
|
|||
|
||||
/**
|
||||
* Test fixture for {@link AbstractHttpReceivingTransportHandler} and sub-classes
|
||||
* {@link XhrTransportHandler} and {@link JsonpTransportHandler}.
|
||||
* {@link XhrReceivingTransportHandler} and {@link JsonpReceivingTransportHandler}.
|
||||
*
|
||||
* @author Rossen Stoyanchev
|
||||
*/
|
||||
|
|
@ -48,7 +48,7 @@ public class HttpReceivingTransportHandlerTests extends AbstractHttpRequestTest
|
|||
@Test
|
||||
public void readMessagesXhr() throws Exception {
|
||||
this.servletRequest.setContent("[\"x\"]".getBytes("UTF-8"));
|
||||
handleRequest(new XhrTransportHandler());
|
||||
handleRequest(new XhrReceivingTransportHandler());
|
||||
|
||||
assertEquals(204, this.servletResponse.getStatus());
|
||||
}
|
||||
|
|
@ -56,7 +56,7 @@ public class HttpReceivingTransportHandlerTests extends AbstractHttpRequestTest
|
|||
@Test
|
||||
public void readMessagesJsonp() throws Exception {
|
||||
this.servletRequest.setContent("[\"x\"]".getBytes("UTF-8"));
|
||||
handleRequest(new JsonpTransportHandler());
|
||||
handleRequest(new JsonpReceivingTransportHandler());
|
||||
|
||||
assertEquals(200, this.servletResponse.getStatus());
|
||||
assertEquals("ok", this.servletResponse.getContentAsString());
|
||||
|
|
@ -66,7 +66,7 @@ public class HttpReceivingTransportHandlerTests extends AbstractHttpRequestTest
|
|||
public void readMessagesJsonpFormEncoded() throws Exception {
|
||||
this.servletRequest.setContent("d=[\"x\"]".getBytes("UTF-8"));
|
||||
this.servletRequest.setContentType(MediaType.APPLICATION_FORM_URLENCODED_VALUE);
|
||||
handleRequest(new JsonpTransportHandler());
|
||||
handleRequest(new JsonpReceivingTransportHandler());
|
||||
|
||||
assertEquals(200, this.servletResponse.getStatus());
|
||||
assertEquals("ok", this.servletResponse.getContentAsString());
|
||||
|
|
@ -78,7 +78,7 @@ public class HttpReceivingTransportHandlerTests extends AbstractHttpRequestTest
|
|||
public void readMessagesJsonpFormEncodedWithEncoding() throws Exception {
|
||||
this.servletRequest.setContent("d=[\"x\"]".getBytes("UTF-8"));
|
||||
this.servletRequest.setContentType("application/x-www-form-urlencoded;charset=UTF-8");
|
||||
handleRequest(new JsonpTransportHandler());
|
||||
handleRequest(new JsonpReceivingTransportHandler());
|
||||
|
||||
assertEquals(200, this.servletResponse.getStatus());
|
||||
assertEquals("ok", this.servletResponse.getContentAsString());
|
||||
|
|
@ -96,7 +96,7 @@ public class HttpReceivingTransportHandlerTests extends AbstractHttpRequestTest
|
|||
@Test(expected=IllegalArgumentException.class)
|
||||
public void readMessagesNoSession() throws Exception {
|
||||
WebSocketHandler webSocketHandler = mock(WebSocketHandler.class);
|
||||
new XhrTransportHandler().handleRequest(this.request, this.response, webSocketHandler, null);
|
||||
new XhrReceivingTransportHandler().handleRequest(this.request, this.response, webSocketHandler, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -113,7 +113,7 @@ public class HttpReceivingTransportHandlerTests extends AbstractHttpRequestTest
|
|||
doThrow(new Exception()).when(wsHandler).handleMessage(session, new TextMessage("x"));
|
||||
|
||||
try {
|
||||
XhrTransportHandler transportHandler = new XhrTransportHandler();
|
||||
XhrReceivingTransportHandler transportHandler = new XhrReceivingTransportHandler();
|
||||
transportHandler.setSockJsServiceConfiguration(sockJsConfig);
|
||||
transportHandler.handleRequest(this.request, this.response, wsHandler, session);
|
||||
fail("Expected exception");
|
||||
|
|
@ -143,7 +143,7 @@ public class HttpReceivingTransportHandlerTests extends AbstractHttpRequestTest
|
|||
WebSocketHandler wsHandler = mock(WebSocketHandler.class);
|
||||
AbstractSockJsSession session = new TestHttpSockJsSession("1", new StubSockJsServiceConfig(), wsHandler);
|
||||
|
||||
new XhrTransportHandler().handleRequest(this.request, this.response, wsHandler, session);
|
||||
new XhrReceivingTransportHandler().handleRequest(this.request, this.response, wsHandler, session);
|
||||
|
||||
assertEquals(500, this.servletResponse.getStatus());
|
||||
verifyNoMoreInteractions(wsHandler);
|
||||
|
|
|
|||
Loading…
Reference in New Issue