Author: markt
Date: Thu Mar 21 13:09:41 2013
New Revision: 1459288

URL: http://svn.apache.org/r1459288
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=54734
Partial fix
javax.servlet.http.WebConnection needs to extend AutoCloseable
Based on a patch by Nick Williams

Modified:
    tomcat/trunk/java/javax/servlet/http/WebConnection.java
    tomcat/trunk/java/org/apache/coyote/http11/upgrade/AbstractProcessor.java
    tomcat/trunk/java/org/apache/tomcat/websocket/server/LocalStrings.properties
    
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java

Modified: tomcat/trunk/java/javax/servlet/http/WebConnection.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/javax/servlet/http/WebConnection.java?rev=1459288&r1=1459287&r2=1459288&view=diff
==============================================================================
--- tomcat/trunk/java/javax/servlet/http/WebConnection.java (original)
+++ tomcat/trunk/java/javax/servlet/http/WebConnection.java Thu Mar 21 13:09:41 
2013
@@ -27,7 +27,7 @@ import javax.servlet.ServletOutputStream
  *
  * @since Servlet 3.1
  */
-public interface WebConnection {
+public interface WebConnection extends AutoCloseable {
 
     /**
      * Provides access to the {@link ServletInputStream} for reading data from

Modified: 
tomcat/trunk/java/org/apache/coyote/http11/upgrade/AbstractProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/upgrade/AbstractProcessor.java?rev=1459288&r1=1459287&r2=1459288&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/upgrade/AbstractProcessor.java 
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/upgrade/AbstractProcessor.java 
Thu Mar 21 13:09:41 2013
@@ -52,6 +52,15 @@ public abstract class AbstractProcessor<
     }
 
 
+    // --------------------------------------------------- AutoCloseable 
methods
+
+    @Override
+    public void close() throws Exception {
+        upgradeServletInputStream.close();
+        upgradeServletOutputStream.close();
+    }
+
+
     // --------------------------------------------------- WebConnection 
methods
 
     @Override

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=1459288&r1=1459287&r2=1459288&view=diff
==============================================================================
--- 
tomcat/trunk/java/org/apache/tomcat/websocket/server/LocalStrings.properties 
(original)
+++ 
tomcat/trunk/java/org/apache/tomcat/websocket/server/LocalStrings.properties 
Thu Mar 21 13:09:41 2013
@@ -24,6 +24,7 @@ serverContainer.servletContextMissing=No
 
 uriTemplate.noMatch=The input template [{0}] generated the pattern [{1}] which 
did not match the supplied pathInfo [{2}]
 
+wsHttpUpgradeHandler.destroyFailed=Failed to close WebConnection while 
destroying the WebSocket HttpUpgradeHandler
 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

Modified: 
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java?rev=1459288&r1=1459287&r2=1459288&view=diff
==============================================================================
--- 
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java 
(original)
+++ 
tomcat/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java 
Thu Mar 21 13:09:41 2013
@@ -32,6 +32,8 @@ import javax.websocket.DeploymentExcepti
 import javax.websocket.Endpoint;
 import javax.websocket.EndpointConfig;
 
+import org.apache.juli.logging.Log;
+import org.apache.juli.logging.LogFactory;
 import org.apache.tomcat.util.res.StringManager;
 import org.apache.tomcat.websocket.WsIOException;
 import org.apache.tomcat.websocket.WsSession;
@@ -41,6 +43,11 @@ import org.apache.tomcat.websocket.WsSes
  */
 public class WsHttpUpgradeHandler implements HttpUpgradeHandler {
 
+    private static final Log log =
+            LogFactory.getLog(WsHttpUpgradeHandler.class);
+    private static final StringManager sm =
+            StringManager.getManager(Constants.PACKAGE_NAME);
+
     private final ClassLoader applicationClassLoader;
 
     private Endpoint ep;
@@ -50,12 +57,10 @@ public class WsHttpUpgradeHandler implem
     private String subProtocol;
     private Map<String,String> pathParameters;
     private boolean secure;
+    WebConnection connection;
 
     private WsSession wsSession;
 
-    private static final StringManager sm =
-            StringManager.getManager(Constants.PACKAGE_NAME);
-
 
     public WsHttpUpgradeHandler() {
         applicationClassLoader = 
Thread.currentThread().getContextClassLoader();
@@ -83,6 +88,8 @@ public class WsHttpUpgradeHandler implem
                     sm.getString("wsHttpUpgradeHandler.noPreInit"));
         }
 
+        this.connection = connection;
+
         ServletInputStream sis;
         ServletOutputStream sos;
         try {
@@ -126,7 +133,11 @@ public class WsHttpUpgradeHandler implem
 
     @Override
     public void destroy() {
-        // NO-OP
+        try {
+            connection.close();
+        } catch (Exception e) {
+            log.error(sm.getString("wsHttpUpgradeHandler.destroyFailed"), e);
+        }
     }
 
 



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to