You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2016/04/06 19:15:45 UTC

svn commit: r1738009 - in /tomcat/tc8.5.x/trunk: ./ java/org/apache/tomcat/websocket/ java/org/apache/tomcat/websocket/server/ test/org/apache/tomcat/websocket/server/ webapps/docs/

Author: markt
Date: Wed Apr  6 17:15:45 2016
New Revision: 1738009

URL: http://svn.apache.org/viewvc?rev=1738009&view=rev
Log:
Restore correct class loader during processing of WebSocket messages post the 8.5.x/9.0.x connector refactoring

Added:
    tomcat/tc8.5.x/trunk/test/org/apache/tomcat/websocket/server/TestClassLoader.java
      - copied unchanged from r1738005, tomcat/trunk/test/org/apache/tomcat/websocket/server/TestClassLoader.java
Modified:
    tomcat/tc8.5.x/trunk/   (props changed)
    tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java
    tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/server/WsFrameServer.java
    tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java
    tomcat/tc8.5.x/trunk/webapps/docs/changelog.xml

Propchange: tomcat/tc8.5.x/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Apr  6 17:15:45 2016
@@ -1 +1 @@
-/tomcat/trunk:1734785,1734799,1734845,1734928,1735041,1735044,1735480,1735577,1735597,1735599-1735600,1735615,1736145,1736162,1736209,1736280,1736297,1736299,1736489,1736646,1736703,1736836,1736849,1737104-1737105,1737112,1737117,1737119-1737120,1737155,1737157,1737192,1737280,1737339,1737632,1737664,1737715,1737748,1737785,1737834,1737860,1737959
+/tomcat/trunk:1734785,1734799,1734845,1734928,1735041,1735044,1735480,1735577,1735597,1735599-1735600,1735615,1736145,1736162,1736209,1736280,1736297,1736299,1736489,1736646,1736703,1736836,1736849,1737104-1737105,1737112,1737117,1737119-1737120,1737155,1737157,1737192,1737280,1737339,1737632,1737664,1737715,1737748,1737785,1737834,1737860,1737959,1738005,1738007

Modified: tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java
URL: http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java?rev=1738009&r1=1738008&r2=1738009&view=diff
==============================================================================
--- tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java (original)
+++ tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/WsFrameBase.java Wed Apr  6 17:15:45 2016
@@ -377,7 +377,7 @@ public abstract class WsFrameBase {
 
 
     @SuppressWarnings("unchecked")
-    private void sendMessageText(boolean last) throws WsIOException {
+    protected void sendMessageText(boolean last) throws WsIOException {
         if (textMsgHandler instanceof WrappedMessageHandler) {
             long maxMessageSize =
                     ((WrappedMessageHandler) textMsgHandler).getMaxMessageSize();
@@ -572,7 +572,7 @@ public abstract class WsFrameBase {
 
 
     @SuppressWarnings("unchecked")
-    private void sendMessageBinary(ByteBuffer msg, boolean last)
+    protected void sendMessageBinary(ByteBuffer msg, boolean last)
             throws WsIOException {
         if (binaryMsgHandler instanceof WrappedMessageHandler) {
             long maxMessageSize =

Modified: tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/server/WsFrameServer.java
URL: http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/server/WsFrameServer.java?rev=1738009&r1=1738008&r2=1738009&view=diff
==============================================================================
--- tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/server/WsFrameServer.java (original)
+++ tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/server/WsFrameServer.java Wed Apr  6 17:15:45 2016
@@ -17,6 +17,7 @@
 package org.apache.tomcat.websocket.server;
 
 import java.io.IOException;
+import java.nio.ByteBuffer;
 
 import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
@@ -24,6 +25,7 @@ import org.apache.tomcat.util.net.Socket
 import org.apache.tomcat.util.res.StringManager;
 import org.apache.tomcat.websocket.Transformation;
 import org.apache.tomcat.websocket.WsFrameBase;
+import org.apache.tomcat.websocket.WsIOException;
 import org.apache.tomcat.websocket.WsSession;
 
 public class WsFrameServer extends WsFrameBase {
@@ -32,12 +34,14 @@ public class WsFrameServer extends WsFra
     private static final StringManager sm = StringManager.getManager(WsFrameServer.class);
 
     private final SocketWrapperBase<?> socketWrapper;
+    private final ClassLoader applicationClassLoader;
 
 
     public WsFrameServer(SocketWrapperBase<?> socketWrapper, WsSession wsSession,
-            Transformation transformation) {
+            Transformation transformation, ClassLoader applicationClassLoader) {
         super(wsSession, transformation);
         this.socketWrapper = socketWrapper;
+        this.applicationClassLoader = applicationClassLoader;
     }
 
 
@@ -92,4 +96,28 @@ public class WsFrameServer extends WsFra
     protected Log getLog() {
         return log;
     }
+
+
+    @Override
+    protected void sendMessageText(boolean last) throws WsIOException {
+        ClassLoader cl = Thread.currentThread().getContextClassLoader();
+        try {
+            Thread.currentThread().setContextClassLoader(applicationClassLoader);
+            super.sendMessageText(last);
+        } finally {
+            Thread.currentThread().setContextClassLoader(cl);
+        }
+    }
+
+
+    @Override
+    protected void sendMessageBinary(ByteBuffer msg, boolean last) throws WsIOException {
+        ClassLoader cl = Thread.currentThread().getContextClassLoader();
+        try {
+            Thread.currentThread().setContextClassLoader(applicationClassLoader);
+            super.sendMessageBinary(msg, last);
+        } finally {
+            Thread.currentThread().setContextClassLoader(cl);
+        }
+    }
 }

Modified: tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java
URL: http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java?rev=1738009&r1=1738008&r2=1738009&view=diff
==============================================================================
--- tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java (original)
+++ tomcat/tc8.5.x/trunk/java/org/apache/tomcat/websocket/server/WsHttpUpgradeHandler.java Wed Apr  6 17:15:45 2016
@@ -126,7 +126,8 @@ public class WsHttpUpgradeHandler implem
                     handshakeRequest.getUserPrincipal(), httpSessionId,
                     negotiatedExtensions, subProtocol, pathParameters, secure,
                     endpointConfig);
-            wsFrame = new WsFrameServer(socketWrapper, wsSession, transformation);
+            wsFrame = new WsFrameServer(socketWrapper, wsSession, transformation,
+                    applicationClassLoader);
             // WsFrame adds the necessary final transformations. Copy the
             // completed transformation chain to the remote end point.
             wsRemoteEndpointServer.setTransformation(wsFrame.getTransformation());

Modified: tomcat/tc8.5.x/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/webapps/docs/changelog.xml?rev=1738009&r1=1738008&r2=1738009&view=diff
==============================================================================
--- tomcat/tc8.5.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc8.5.x/trunk/webapps/docs/changelog.xml Wed Apr  6 17:15:45 2016
@@ -141,6 +141,11 @@
         to allow frameworks to more easily dispatch requests to WebSocket
         endpoints. (violetagg)
       </fix>
+      <fix>
+        Fix a regression caused by the connector refactoring and ensure that the
+        thread context class loader is set to the to the web application
+        classloder when processing WebSocket messages on the server. (markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Web applications">



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