Browse Source

Adjust SockJS use of ServerHttpResponse close vs flush

pull/337/merge
Rossen Stoyanchev 13 years ago
parent
commit
0dcc5c048b
  1. 16
      spring-websocket/src/main/java/org/springframework/web/socket/server/support/WebSocketHttpRequestHandler.java
  2. 18
      spring-websocket/src/main/java/org/springframework/web/socket/sockjs/SockJsHttpRequestHandler.java
  3. 3
      spring-websocket/src/main/java/org/springframework/web/socket/sockjs/support/AbstractSockJsService.java

16
spring-websocket/src/main/java/org/springframework/web/socket/server/support/WebSocketHttpRequestHandler.java

@ -60,7 +60,7 @@ public class WebSocketHttpRequestHandler implements HttpRequestHandler { @@ -60,7 +60,7 @@ public class WebSocketHttpRequestHandler implements HttpRequestHandler {
private final HandshakeHandler handshakeHandler;
private final WebSocketHandler webSocketHandler;
private final WebSocketHandler wsHandler;
private final List<HandshakeInterceptor> interceptors = new ArrayList<HandshakeInterceptor>();
@ -72,7 +72,7 @@ public class WebSocketHttpRequestHandler implements HttpRequestHandler { @@ -72,7 +72,7 @@ public class WebSocketHttpRequestHandler implements HttpRequestHandler {
public WebSocketHttpRequestHandler( WebSocketHandler webSocketHandler, HandshakeHandler handshakeHandler) {
Assert.notNull(webSocketHandler, "webSocketHandler must not be null");
Assert.notNull(handshakeHandler, "handshakeHandler must not be null");
this.webSocketHandler = decorateWebSocketHandler(webSocketHandler);
this.wsHandler = decorateWebSocketHandler(webSocketHandler);
this.handshakeHandler = handshakeHandler;
}
@ -100,9 +100,9 @@ public class WebSocketHttpRequestHandler implements HttpRequestHandler { @@ -100,9 +100,9 @@ public class WebSocketHttpRequestHandler implements HttpRequestHandler {
* <p>By default {@link ExceptionWebSocketHandlerDecorator} and
* {@link LoggingWebSocketHandlerDecorator} are applied are added.
*/
protected WebSocketHandler decorateWebSocketHandler(WebSocketHandler handler) {
handler = new ExceptionWebSocketHandlerDecorator(handler);
return new LoggingWebSocketHandlerDecorator(handler);
protected WebSocketHandler decorateWebSocketHandler(WebSocketHandler wsHandler) {
wsHandler = new ExceptionWebSocketHandlerDecorator(wsHandler);
return new LoggingWebSocketHandlerDecorator(wsHandler);
}
@Override
@ -112,7 +112,7 @@ public class WebSocketHttpRequestHandler implements HttpRequestHandler { @@ -112,7 +112,7 @@ public class WebSocketHttpRequestHandler implements HttpRequestHandler {
ServerHttpRequest request = new ServletServerHttpRequest(servletRequest);
ServerHttpResponse response = new ServletServerHttpResponse(servletResponse);
HandshakeInterceptorChain chain = new HandshakeInterceptorChain(this.interceptors, this.webSocketHandler);
HandshakeInterceptorChain chain = new HandshakeInterceptorChain(this.interceptors, this.wsHandler);
HandshakeFailureException failure = null;
try {
@ -120,8 +120,9 @@ public class WebSocketHttpRequestHandler implements HttpRequestHandler { @@ -120,8 +120,9 @@ public class WebSocketHttpRequestHandler implements HttpRequestHandler {
if (!chain.applyBeforeHandshake(request, response, attributes)) {
return;
}
this.handshakeHandler.doHandshake(request, response, this.webSocketHandler, attributes);
this.handshakeHandler.doHandshake(request, response, this.wsHandler, attributes);
chain.applyAfterHandshake(request, response, null);
response.close();
}
catch (HandshakeFailureException ex) {
failure = ex;
@ -134,7 +135,6 @@ public class WebSocketHttpRequestHandler implements HttpRequestHandler { @@ -134,7 +135,6 @@ public class WebSocketHttpRequestHandler implements HttpRequestHandler {
chain.applyAfterHandshake(request, response, failure);
throw failure;
}
response.flush();
}
}

18
spring-websocket/src/main/java/org/springframework/web/socket/sockjs/SockJsHttpRequestHandler.java

@ -43,19 +43,19 @@ public class SockJsHttpRequestHandler implements HttpRequestHandler { @@ -43,19 +43,19 @@ public class SockJsHttpRequestHandler implements HttpRequestHandler {
private final SockJsService sockJsService;
private final WebSocketHandler webSocketHandler;
private final WebSocketHandler wsHandler;
/**
* Create a new {@link SockJsHttpRequestHandler}.
* @param sockJsService the SockJS service
* @param webSocketHandler the websocket handler
* @param wsHandler the websocket handler
*/
public SockJsHttpRequestHandler(SockJsService sockJsService, WebSocketHandler webSocketHandler) {
public SockJsHttpRequestHandler(SockJsService sockJsService, WebSocketHandler wsHandler) {
Assert.notNull(sockJsService, "sockJsService must not be null");
Assert.notNull(webSocketHandler, "webSocketHandler must not be null");
Assert.notNull(wsHandler, "webSocketHandler must not be null");
this.sockJsService = sockJsService;
this.webSocketHandler = decorateWebSocketHandler(webSocketHandler);
this.wsHandler = decorateWebSocketHandler(wsHandler);
}
@ -65,9 +65,9 @@ public class SockJsHttpRequestHandler implements HttpRequestHandler { @@ -65,9 +65,9 @@ public class SockJsHttpRequestHandler implements HttpRequestHandler {
* <p>By default {@link ExceptionWebSocketHandlerDecorator} and
* {@link LoggingWebSocketHandlerDecorator} are applied are added.
*/
protected WebSocketHandler decorateWebSocketHandler(WebSocketHandler handler) {
handler = new ExceptionWebSocketHandlerDecorator(handler);
return new LoggingWebSocketHandlerDecorator(handler);
protected WebSocketHandler decorateWebSocketHandler(WebSocketHandler wsHandler) {
wsHandler = new ExceptionWebSocketHandlerDecorator(wsHandler);
return new LoggingWebSocketHandlerDecorator(wsHandler);
}
@Override
@ -78,7 +78,7 @@ public class SockJsHttpRequestHandler implements HttpRequestHandler { @@ -78,7 +78,7 @@ public class SockJsHttpRequestHandler implements HttpRequestHandler {
ServerHttpResponse response = new ServletServerHttpResponse(servletResponse);
try {
this.sockJsService.handleRequest(request, response, this.webSocketHandler);
this.sockJsService.handleRequest(request, response, this.wsHandler);
}
catch (Throwable t) {
throw new SockJsException("Uncaught failure in SockJS request, uri=" + request.getURI(), t);

3
spring-websocket/src/main/java/org/springframework/web/socket/sockjs/support/AbstractSockJsService.java

@ -320,8 +320,7 @@ public abstract class AbstractSockJsService implements SockJsService { @@ -320,8 +320,7 @@ public abstract class AbstractSockJsService implements SockJsService {
}
handleTransportRequest(request, response, wsHandler, sessionId, transport);
}
response.flush();
response.close();
}
catch (IOException ex) {
throw new SockJsException("Failed to write to the response", null, ex);

Loading…
Cancel
Save