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