On Nov 25, 2013, at 9:11 PM, Konstantin Kolinko wrote:

> 2013/11/25 Nick Williams <nicho...@nicholaswilliams.net>:
>> I've written a simple Servlet/WebSocket client that sends a message over the 
>> Session each time a GET request comes in. This worked a few months ago:
>> 
>>    @Override
>>    protected void doGet(HttpServletRequest request, HttpServletResponse 
>> response)
>>            throws ServletException, IOException
>>    {
>>        ClusterMessage message = new ClusterMessage(this.nodeId,
>>                "request:{ip:\"" + request.getRemoteAddr() +
>>                "\",queryString:\"" + request.getQueryString() + "\"}");
>> 
>>        try(OutputStream output = 
>> this.session.getBasicRemote().getSendStream();
>>            ObjectOutputStream stream = new ObjectOutputStream(output))
>>        {
>>            stream.writeObject(message);
>>        }
>>        response.getWriter().append("OK");
>>    }
>> 
>> But on the latest trunk, I get this error on the first request to doGet:
>> 
>> java.lang.IllegalStateException: The remote endpoint was in state 
>> [STREAM_WRITING] which is an invalid state for called method
>>        
>> org.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.checkState(WsRemoteEndpointImplBase.java:1014)
>>        
>> org.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.binaryPartialStart(WsRemoteEndpointImplBase.java:961)
>>        
>> org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendPartialBytes(WsRemoteEndpointImplBase.java:140)
>>        
>> org.apache.tomcat.websocket.WsRemoteEndpointImplBase$WsOutputStream.doWrite(WsRemoteEndpointImplBase.java:838)
>>        
>> org.apache.tomcat.websocket.WsRemoteEndpointImplBase$WsOutputStream.flush(WsRemoteEndpointImplBase.java:821)
>>        
>> java.io.ObjectOutputStream$BlockDataOutputStream.flush(ObjectOutputStream.java:1823)
>>        java.io.ObjectOutputStream.flush(ObjectOutputStream.java:719)
>>        java.io.ObjectOutputStream.close(ObjectOutputStream.java:740)
>>        com.wrox.ClusterNodeServlet.doGet(ClusterNodeServlet.java:72)
>>        javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
>>        javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
>>        org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
>> 
>> On all subsequent requests, I get this error:
>> 
>> java.lang.IllegalStateException: The remote endpoint was in state 
>> [STREAM_WRITING] which is an invalid state for called method
>>        
>> org.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.checkState(WsRemoteEndpointImplBase.java:1014)
>>        
>> org.apache.tomcat.websocket.WsRemoteEndpointImplBase$StateMachine.streamStart(WsRemoteEndpointImplBase.java:951)
>>        
>> org.apache.tomcat.websocket.WsRemoteEndpointImplBase.getSendStream(WsRemoteEndpointImplBase.java:190)
>>        
>> org.apache.tomcat.websocket.WsRemoteEndpointBasic.getSendStream(WsRemoteEndpointBasic.java:62)
>>        com.wrox.ClusterNodeServlet.doGet(ClusterNodeServlet.java:68)
>>        javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
>>        javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
>>        org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
>> 
>> I'm guessing I need to file a BZ, but I wanted to make sure. I don't see how 
>> I could possibly be doing anything wrong in this simple code.
>> 
> 
> 
> There was this change:
> http://svn.apache.org/viewvc?view=revision&revision=1544213
> 
>      <fix>
>        <bug>55799</bug>: Correctly enforce the restriction in JSR356 that no
>        more than one data message may be sent to a remote WebSocket endpoint 
> at
>        a time. (markt)
>      </fix>

Problem is, I'm only sending one data message. That's it. The very first and 
only data message I send triggers the first error. The second error is before I 
even get to sending a data message; it's when I retrieve a stream. Something's 
definitely broken. Even IF I were sending multiple messages (again, I'm not); 
they should be queued, not result in an error that leaves the Session in an 
inconsistent state indefinitely.

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

Reply via email to