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