Details
-
Type: Bug
-
Status: Closed
-
Priority: Major
-
Resolution: Fixed
-
Affects Version/s: 2.0-Alpha2
-
Fix Version/s: 2.0-Alpha3
-
Component/s: Push Server
-
Labels:None
-
Environment:Affects Glassfish (and probably others as well)
Description
It seems that sometime the javacript call for ice.push.createPushId will send a request without the browser id header. This in turn causes a null pointer exception on the server which will response with an error html snippet in place of the request push id. Even though the status of the response is 500 - the consumer of the js client api will not be told an error occurred and will simply be handed the snippet of HTML as the push id. This causes much grief in the subsequent API calls.
the following stacktrace is seen in the GF3 server logs:
java.lang.RuntimeException: java.lang.RuntimeException: wrapped Exception: java.lang.NullPointerException
at org.icepush.servlet.ICEpushServlet.service(ICEpushServlet.java:26)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
at java.lang.Thread.run(Thread.java:637)
Caused by: java.lang.RuntimeException: wrapped Exception: java.lang.NullPointerException
at org.icepush.servlet.MainServlet.service(MainServlet.java:66)
at org.icepush.servlet.ICEpushServlet.service(ICEpushServlet.java:20)
... 25 more
Caused by: java.lang.NullPointerException
at org.icepush.servlet.BrowserDispatcher.getBrowserIDFromCookie(BrowserDispatcher.java:76)
at org.icepush.servlet.BrowserDispatcher.service(BrowserDispatcher.java:47)
at org.icepush.servlet.PathDispatcher.service(PathDispatcher.java:44)
at org.icepush.servlet.MainServlet.service(MainServlet.java:44)
... 26 more
the following stacktrace is seen in the GF3 server logs:
java.lang.RuntimeException: java.lang.RuntimeException: wrapped Exception: java.lang.NullPointerException
at org.icepush.servlet.ICEpushServlet.service(ICEpushServlet.java:26)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
at java.lang.Thread.run(Thread.java:637)
Caused by: java.lang.RuntimeException: wrapped Exception: java.lang.NullPointerException
at org.icepush.servlet.MainServlet.service(MainServlet.java:66)
at org.icepush.servlet.ICEpushServlet.service(ICEpushServlet.java:20)
... 25 more
Caused by: java.lang.NullPointerException
at org.icepush.servlet.BrowserDispatcher.getBrowserIDFromCookie(BrowserDispatcher.java:76)
at org.icepush.servlet.BrowserDispatcher.service(BrowserDispatcher.java:47)
at org.icepush.servlet.PathDispatcher.service(PathDispatcher.java:44)
at org.icepush.servlet.MainServlet.service(MainServlet.java:44)
... 26 more
Suggested solution:
1.) fix javascript api methods to throw a JS exception if the status of the response is not 200.
2.) fix either the javascript to ensure a broswer id cookie is created on startup - or allow the server to gracefully assign a new browser id if one was not provided with the request.
Thoughts?