https://issues.apache.org/bugzilla/show_bug.cgi?id=54716

            Bug ID: 54716
           Summary: WebSocket implementation "freaks out" if Session
                    closed or exception thrown from onOpen method
           Product: Tomcat 8
           Version: trunk
          Hardware: All
                OS: All
            Status: NEW
          Severity: major
          Priority: P2
         Component: Catalina
          Assignee: dev@tomcat.apache.org
          Reporter: nicho...@nicholaswilliams.net
    Classification: Unclassified

If Session#close() is called from an onOpen method, the container throws a
NullPointerException, as evidenced below:

Mar 17, 2013 10:57:50 PM
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler process
SEVERE: Error reading request, ignored
java.lang.IllegalArgumentException: Failed to call onOpen method of POJO end
point for POJO of type [com.wrox.chat.ChatEndpoint]
    at
org.apache.tomcat.websocket.pojo.PojoEndpointBase.doOnOpen(PojoEndpointBase.java:54)
    at
org.apache.tomcat.websocket.pojo.PojoEndpointServer.onOpen(PojoEndpointServer.java:69)
    at
org.apache.tomcat.websocket.server.WsProtocolHandler.init(WsProtocolHandler.java:107)
    at
org.apache.coyote.http11.upgrade.AbstractProcessor.<init>(AbstractProcessor.java:51)
    at
org.apache.coyote.http11.upgrade.NioProcessor.<init>(NioProcessor.java:31)
    at
org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.createUpgradeProcessor(Http11NioProtocol.java:309)
    at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:634)
    at
org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:223)
    at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1581)
    at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1540)
    at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:487)
    at
org.apache.tomcat.websocket.pojo.PojoEndpointBase.doOnOpen(PojoEndpointBase.java:51)
    ... 12 more
Caused by: java.lang.NullPointerException
    at
org.apache.tomcat.websocket.BackgroundProcessManager.unregister(BackgroundProcessManager.java:75)
    at
org.apache.tomcat.websocket.WsWebSocketContainer.unregisterSession(WsWebSocketContainer.java:283)
    at
org.apache.tomcat.websocket.server.WsServerContainer.unregisterSession(WsServerContainer.java:283)
    at
org.apache.tomcat.websocket.WsSession.sendCloseMessage(WsSession.java:357)
    at org.apache.tomcat.websocket.WsSession.close(WsSession.java:305)
    at com.wrox.chat.ChatEndpoint.onOpen(ChatEndpoint.java:54)
    ... 17 more

If this or any other exceptions are thrown from an onOpen method, even if the
session isn't closed, Tomcat starts randomly rejecting a handful of requests
with no explanation in the logs, and on shut down dozens of these errors appear
on stderr:

Mar 17, 2013 11:22:11 PM org.apache.tomcat.util.modeler.Registry
unregisterComponent
SEVERE: Error unregistering mbean 
javax.management.RuntimeOperationsException: Object name cannot be null
    at
com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.isRegistered(DefaultMBeanServerInterceptor.java:569)
    at
com.sun.jmx.mbeanserver.JmxMBeanServer.isRegistered(JmxMBeanServer.java:628)
    at
org.apache.tomcat.util.modeler.Registry.unregisterComponent(Registry.java:420)
    at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.unregister(AbstractProtocol.java:768)
    at
org.apache.coyote.AbstractProtocol$RecycledProcessors.clear(AbstractProtocol.java:820)
    at
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.recycle(AbstractProtocol.java:578)
    at
org.apache.tomcat.util.net.NioEndpoint.releaseCaches(NioEndpoint.java:318)
    at org.apache.tomcat.util.net.NioEndpoint.unbind(NioEndpoint.java:481)
    at
org.apache.tomcat.util.net.AbstractEndpoint.destroy(AbstractEndpoint.java:675)
    at org.apache.coyote.AbstractProtocol.destroy(AbstractProtocol.java:522)
    at
org.apache.catalina.connector.Connector.destroyInternal(Connector.java:1020)
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305)
    at
org.apache.catalina.core.StandardService.destroyInternal(StandardService.java:584)
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305)
    at
org.apache.catalina.core.StandardServer.destroyInternal(StandardServer.java:835)
    at org.apache.catalina.util.LifecycleBase.destroy(LifecycleBase.java:305)
    at org.apache.catalina.startup.Catalina.stop(Catalina.java:719)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:680)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:487)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:357)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:491)
Caused by: java.lang.IllegalArgumentException: Object name cannot be null
    ... 24 more

-- 
You are receiving this mail because:
You are the assignee for the bug.

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

Reply via email to