Author: markt Date: Mon Jun 30 09:27:33 2014 New Revision: 1606653 URL: http://svn.apache.org/r1606653 Log: Fix root cause of NPE when using WebSocket clients.
Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsFrameClient.java tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsFrameClient.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsFrameClient.java?rev=1606653&r1=1606652&r2=1606653&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/WsFrameClient.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/WsFrameClient.java Mon Jun 30 09:27:33 2014 @@ -37,7 +37,10 @@ public class WsFrameClient extends WsFra this.response = response; this.channel = channel; this.handler = new WsFrameClientCompletionHandler(); + } + + void startInputProcessing() { try { processSocketRead(); } catch (IOException e) { Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java?rev=1606653&r1=1606652&r2=1606653&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/WsRemoteEndpointImplBase.java Mon Jun 30 09:27:33 2014 @@ -260,9 +260,7 @@ public abstract class WsRemoteEndpointIm messageParts.add(new MessagePart(opCode, payload, last, new EndMessageHandler(this, handler))); - if (transformation != null) { - messageParts = transformation.sendMessagePart(messageParts); - } + messageParts = transformation.sendMessagePart(messageParts); MessagePart mp = messageParts.remove(0); Modified: tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java?rev=1606653&r1=1606652&r2=1606653&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java (original) +++ tomcat/trunk/java/org/apache/tomcat/websocket/WsWebSocketContainer.java Mon Jun 30 09:27:33 2014 @@ -316,8 +316,6 @@ public class WsWebSocketContainer sm.getString("wsWebSocketContainer.httpRequestFailed"), e); } - // TODO Add extension/transformation support to the client - // Switch to WebSocket WsRemoteEndpointImplClient wsRemoteEndpointClient = new WsRemoteEndpointImplClient(channel); @@ -325,13 +323,17 @@ public class WsWebSocketContainer this, null, null, null, null, null, subProtocol, Collections.<String, String> emptyMap(), secure, clientEndpointConfiguration); - endpoint.onOpen(wsSession, clientEndpointConfiguration); - registerSession(endpoint, wsSession); - // Object creation will trigger input processing - @SuppressWarnings("unused") WsFrameClient wsFrameClient = new WsFrameClient(response, channel, wsSession); + // WsFrame adds the necessary final transformations. Copy the + // completed transformation chain to the remote end point. + wsRemoteEndpointClient.setTransformation(wsFrameClient.getTransformation()); + + endpoint.onOpen(wsSession, clientEndpointConfiguration); + registerSession(endpoint, wsSession); + + wsFrameClient.startInputProcessing(); return wsSession; } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org