Author: markt
Date: Wed Mar 20 09:58:07 2013
New Revision: 1458710
URL: http://svn.apache.org/r1458710
Log:
Align implementation with new name in spec WsProtocolHandler ->
WsHttpUpgradeHanlder
Align implementation with new HttpServletRequest.upgrade() method
Added:
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java
- copied, changed from r1458695,
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java
Removed:
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java
Modified:
tomcat/trunk/java/javax/servlet/http/HttpServletRequest.java
tomcat/trunk/java/javax/servlet/http/HttpServletRequestWrapper.java
tomcat/trunk/java/javax/servlet/http/HttpUpgradeHandler.java
tomcat/trunk/java/org/apache/catalina/connector/Request.java
tomcat/trunk/java/org/apache/catalina/connector/RequestFacade.java
tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java
tomcat/trunk/java/org/apache/tomcat/websocket/server/LocalStrings.properties
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsRemoteEndpointImplServer.java
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServlet.java
tomcat/trunk/test/org/apache/coyote/http11/upgrade/TestUpgrade.java
Modified: tomcat/trunk/java/javax/servlet/http/HttpServletRequest.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/javax/servlet/http/HttpServletRequest.java?rev=1458710&r1=1458709&r2=1458710&view=diff
==============================================================================
--- tomcat/trunk/java/javax/servlet/http/HttpServletRequest.java (original)
+++ tomcat/trunk/java/javax/servlet/http/HttpServletRequest.java Wed Mar 20
09:58:07 2013
@@ -512,5 +512,6 @@ public interface HttpServletRequest exte
*
* @since Servlet 3.1
*/
- public void upgrade(HttpUpgradeHandler handler) throws java.io.IOException;
+ public <T extends HttpUpgradeHandler> T upgrade(
+ Class<T> httpUpgradeHandlerClass) throws java.io.IOException;
}
Modified: tomcat/trunk/java/javax/servlet/http/HttpServletRequestWrapper.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/javax/servlet/http/HttpServletRequestWrapper.java?rev=1458710&r1=1458709&r2=1458710&view=diff
==============================================================================
--- tomcat/trunk/java/javax/servlet/http/HttpServletRequestWrapper.java
(original)
+++ tomcat/trunk/java/javax/servlet/http/HttpServletRequestWrapper.java Wed Mar
20 09:58:07 2013
@@ -364,13 +364,13 @@ public class HttpServletRequestWrapper e
* {@inheritDoc}
* <p>
* The default behavior of this method is to return
- * {@link HttpServletRequest#upgrade(HttpUpgradeHandler)}
- * on the wrapped request object.
+ * {@link HttpServletRequest#upgrade(Class)} on the wrapped request object.
*
* @since Servlet 3.1
*/
@Override
- public void upgrade(HttpUpgradeHandler handler) throws java.io.IOException
{
- this._getHttpServletRequest().upgrade(handler);
+ public <T extends HttpUpgradeHandler> T upgrade(
+ Class<T> httpUpgradeHandlerClass) throws IOException {
+ return this._getHttpServletRequest().upgrade(httpUpgradeHandlerClass);
}
}
Modified: tomcat/trunk/java/javax/servlet/http/HttpUpgradeHandler.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/javax/servlet/http/HttpUpgradeHandler.java?rev=1458710&r1=1458709&r2=1458710&view=diff
==============================================================================
--- tomcat/trunk/java/javax/servlet/http/HttpUpgradeHandler.java (original)
+++ tomcat/trunk/java/javax/servlet/http/HttpUpgradeHandler.java Wed Mar 20
09:58:07 2013
@@ -25,13 +25,18 @@ public interface HttpUpgradeHandler {
/**
* This method is called once the request/response pair where
- * {@link HttpServletRequest#upgrade(HttpUpgradeHandler)} is called has
- * completed processing and is the point where control of the connection
- * passes from the container to the {@link HttpUpgradeHandler}.
+ * {@link HttpServletRequest#upgrade(Class)} is called has completed
+ * processing and is the point where control of the connection passes from
+ * the container to the {@link HttpUpgradeHandler}.
*
* @param connection The connection that has been upgraded
*
* @since Servlet 3.1
*/
void init(WebConnection connection);
+
+ /**
+ * This method is called after the upgraded connection has been closed.
+ */
+ void destroy();
}
Modified: tomcat/trunk/java/org/apache/catalina/connector/Request.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/Request.java?rev=1458710&r1=1458709&r2=1458710&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/Request.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/Request.java Wed Mar 20
09:58:07 2013
@@ -1885,13 +1885,24 @@ public class Request
* @since Servlet 3.1
*/
@Override
- public void upgrade(HttpUpgradeHandler handler) throws IOException {
+ public <T extends HttpUpgradeHandler> T upgrade(
+ Class<T> httpUpgradeHandlerClass) throws java.io.IOException {
+
+ T handler;
+ try {
+ handler = httpUpgradeHandlerClass.newInstance();
+ } catch (InstantiationException | IllegalAccessException e) {
+ throw new IOException(e);
+ }
+
coyoteRequest.action(ActionCode.UPGRADE, handler);
// Output required by RFC2616. Protocol specific headers should have
// already been set.
response.setStatus(HttpServletResponse.SC_SWITCHING_PROTOCOLS);
response.flushBuffer();
+
+ return handler;
}
/**
Modified: tomcat/trunk/java/org/apache/catalina/connector/RequestFacade.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/RequestFacade.java?rev=1458710&r1=1458709&r2=1458710&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/RequestFacade.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/connector/RequestFacade.java Wed Mar
20 09:58:07 2013
@@ -1112,7 +1112,8 @@ public class RequestFacade implements Ht
* @since Servlet 3.1
*/
@Override
- public void upgrade(HttpUpgradeHandler handler) throws IOException {
- request.upgrade(handler);
+ public <T extends HttpUpgradeHandler> T upgrade(
+ Class<T> httpUpgradeHandlerClass) throws java.io.IOException {
+ return request.upgrade(httpUpgradeHandlerClass);
}
}
Modified: tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java?rev=1458710&r1=1458709&r2=1458710&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java (original)
+++ tomcat/trunk/java/org/apache/coyote/AbstractProtocol.java Wed Mar 20
09:58:07 2013
@@ -675,7 +675,9 @@ public abstract class AbstractProtocol i
// Connection closed. OK to recycle the processor. Upgrade
// processors are not recycled.
connections.remove(socket);
- if (!processor.isUpgrade()) {
+ if (processor.isUpgrade()) {
+ processor.getHttpUpgradeHandler().destroy();
+ } else {
release(wrapper, processor, true, false);
}
}
Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/server/LocalStrings.properties
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/LocalStrings.properties?rev=1458710&r1=1458709&r2=1458710&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/tomcat/websocket/server/LocalStrings.properties
(original)
+++
tomcat/trunk/java/org/apache/tomcat/websocket/server/LocalStrings.properties
Wed Mar 20 09:58:07 2013
@@ -24,4 +24,6 @@ serverContainer.servletContextMissing=No
uriTemplate.noMatch=The input template [{0}] generated the pattern [{1}] which
did not match the supplied pathInfo [{2}]
+wsHttpUpgradeHandler.noPreInit=The preInit() method must be called to
configure the WebSocket HttpUpgradeHandler before the container calls init().
Usually, this means the Servlet that created the WsHttpUpgradeHandler instance
should also call preInit()
+
wsRemoteEndpointServer.closeFailed=Failed to close the ServletOutputStream
connection cleanly
\ No newline at end of file
Copied:
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java
(from r1458695,
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java)
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java?p2=tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java&p1=tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java&r1=1458695&r2=1458710&rev=1458710&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsProtocolHandler.java
(original)
+++
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java
Wed Mar 20 09:58:07 2013
@@ -32,27 +32,37 @@ import javax.websocket.DeploymentExcepti
import javax.websocket.Endpoint;
import javax.websocket.EndpointConfig;
+import org.apache.tomcat.util.res.StringManager;
import org.apache.tomcat.websocket.WsIOException;
import org.apache.tomcat.websocket.WsSession;
/**
* Servlet 3.1 HTTP upgrade handler for WebSocket connections.
*/
-public class WsProtocolHandler implements HttpUpgradeHandler {
+public class WsHttpUpgradeHandler implements HttpUpgradeHandler {
- private final Endpoint ep;
- private final EndpointConfig endpointConfig;
private final ClassLoader applicationClassLoader;
- private final WsServerContainer webSocketContainer;
- private final WsHandshakeRequest handshakeRequest;
- private final String subProtocol;
- private final Map<String,String> pathParameters;
- private final boolean secure;
+
+ private Endpoint ep;
+ private EndpointConfig endpointConfig;
+ private WsServerContainer webSocketContainer;
+ private WsHandshakeRequest handshakeRequest;
+ private String subProtocol;
+ private Map<String,String> pathParameters;
+ private boolean secure;
private WsSession wsSession;
+ private static final StringManager sm =
+ StringManager.getManager(Constants.PACKAGE_NAME);
+
- public WsProtocolHandler(Endpoint ep, EndpointConfig endpointConfig,
+ public WsHttpUpgradeHandler() {
+ applicationClassLoader =
Thread.currentThread().getContextClassLoader();
+ }
+
+
+ public void preInit(Endpoint ep, EndpointConfig endpointConfig,
WsServerContainer wsc, WsHandshakeRequest handshakeRequest,
String subProtocol, Map<String,String> pathParameters,
boolean secure) {
@@ -63,12 +73,16 @@ public class WsProtocolHandler implement
this.subProtocol = subProtocol;
this.pathParameters = pathParameters;
this.secure = secure;
- applicationClassLoader =
Thread.currentThread().getContextClassLoader();
}
@Override
public void init(WebConnection connection) {
+ if (ep == null) {
+ throw new IllegalStateException(
+ sm.getString("wsHttpUpgradeHandler.noPreInit"));
+ }
+
ServletInputStream sis;
ServletOutputStream sos;
try {
@@ -110,6 +124,12 @@ public class WsProtocolHandler implement
}
+ @Override
+ public void destroy() {
+ // NO-OP
+ }
+
+
private void onError(Throwable throwable) {
// Need to call onError using the web application's class loader
Thread t = Thread.currentThread();
@@ -138,11 +158,11 @@ public class WsProtocolHandler implement
private static class WsReadListener implements ReadListener {
- private final WsProtocolHandler wsProtocolHandler;
+ private final WsHttpUpgradeHandler wsProtocolHandler;
private final WsFrameServer wsFrame;
- private WsReadListener(WsProtocolHandler wsProtocolHandler,
+ private WsReadListener(WsHttpUpgradeHandler wsProtocolHandler,
WsFrameServer wsFrame) {
this.wsProtocolHandler = wsProtocolHandler;
this.wsFrame = wsFrame;
@@ -181,10 +201,10 @@ public class WsProtocolHandler implement
private static class WsWriteListener implements WriteListener {
- private final WsProtocolHandler wsProtocolHandler;
+ private final WsHttpUpgradeHandler wsProtocolHandler;
private final WsRemoteEndpointImplServer wsRemoteEndpointServer;
- private WsWriteListener(WsProtocolHandler wsProtocolHandler,
+ private WsWriteListener(WsHttpUpgradeHandler wsProtocolHandler,
WsRemoteEndpointImplServer wsRemoteEndpointServer) {
this.wsProtocolHandler = wsProtocolHandler;
this.wsRemoteEndpointServer = wsRemoteEndpointServer;
Modified:
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsRemoteEndpointImplServer.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsRemoteEndpointImplServer.java?rev=1458710&r1=1458709&r2=1458710&view=diff
==============================================================================
---
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsRemoteEndpointImplServer.java
(original)
+++
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsRemoteEndpointImplServer.java
Wed Mar 20 09:58:07 2013
@@ -39,7 +39,7 @@ public class WsRemoteEndpointImplServer
private static final StringManager sm =
StringManager.getManager(Constants.PACKAGE_NAME);
private static final Log log =
- LogFactory.getLog(WsProtocolHandler.class);
+ LogFactory.getLog(WsHttpUpgradeHandler.class);
private final ServletOutputStream sos;
private final WsWriteTimeout wsWriteTimeout;
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServlet.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServlet.java?rev=1458710&r1=1458709&r2=1458710&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServlet.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/websocket/server/WsServlet.java Wed Mar
20 09:58:07 2013
@@ -34,7 +34,6 @@ import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpUpgradeHandler;
import javax.websocket.Endpoint;
import javax.websocket.Extension;
import javax.websocket.server.ServerEndpointConfig;
@@ -155,9 +154,10 @@ public class WsServlet extends HttpServl
}
}
- HttpUpgradeHandler wsHandler = new WsProtocolHandler(ep, sec, sc,
- wsRequest, subProtocol, pathParameters, req.isSecure());
- req.upgrade(wsHandler);
+ WsHttpUpgradeHandler wsHandler =
+ req.upgrade(WsHttpUpgradeHandler.class);
+ wsHandler.preInit(ep, sec, sc, wsRequest, subProtocol, pathParameters,
+ req.isSecure());
}
Modified: tomcat/trunk/test/org/apache/coyote/http11/upgrade/TestUpgrade.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/http11/upgrade/TestUpgrade.java?rev=1458710&r1=1458709&r2=1458710&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/coyote/http11/upgrade/TestUpgrade.java
(original)
+++ tomcat/trunk/test/org/apache/coyote/http11/upgrade/TestUpgrade.java Wed Mar
20 09:58:07 2013
@@ -159,14 +159,7 @@ public class TestUpgrade extends TomcatB
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
- HttpUpgradeHandler upgradeHandler;
- try {
- upgradeHandler = upgradeHandlerClass.newInstance();
- } catch (InstantiationException | IllegalAccessException e) {
- throw new ServletException(e);
- }
-
- req.upgrade(upgradeHandler);
+ req.upgrade(upgradeHandlerClass);
}
}
@@ -189,7 +182,7 @@ public class TestUpgrade extends TomcatB
}
- protected static class EchoBlocking implements HttpUpgradeHandler {
+ public static class EchoBlocking implements HttpUpgradeHandler {
@Override
public void init(WebConnection connection) {
@@ -201,10 +194,15 @@ public class TestUpgrade extends TomcatB
throw new IllegalStateException(ioe);
}
}
+
+ @Override
+ public void destroy() {
+ // NO-OP
+ }
}
- protected static class EchoNonBlocking implements HttpUpgradeHandler {
+ public static class EchoNonBlocking implements HttpUpgradeHandler {
private ServletInputStream sis;
private ServletOutputStream sos;
@@ -223,6 +221,11 @@ public class TestUpgrade extends TomcatB
sos.setWriteListener(new EchoWriteListener());
}
+ @Override
+ public void destroy() {
+ // NO-OP
+ }
+
private class EchoReadListener implements ReadListener {
private byte[] buffer = new byte[8096];
@@ -253,8 +256,7 @@ public class TestUpgrade extends TomcatB
@Override
public void onError(Throwable throwable) {
- // TODO Auto-generated method stub
-
+ // NO-OP
}
}
@@ -262,14 +264,12 @@ public class TestUpgrade extends TomcatB
@Override
public void onWritePossible() {
- // TODO Auto-generated method stub
-
+ // NO-OP
}
@Override
public void onError(Throwable throwable) {
- // TODO Auto-generated method stub
-
+ // NO-OP
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]