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>

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

Reply via email to