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