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: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to