[ http://issues.apache.org/jira/browse/BEEHIVE-873?page=comments#action_12373776 ]
Abdessattar Sassi commented on BEEHIVE-873: ------------------------------------------- This issue is still not fixed in 1.0.1 according to my same test case. Please confirm if the fix has been integrated into 1.0.1 or not. The logout action throws the following exception with exactly the same code as submitted above. Exception: java.lang.NullPointerException -------------------------------------------------------------------------------- Stack Trace: java.lang.NullPointerException at org.apache.catalina.authenticator.AuthenticatorBase.register(AuthenticatorBase.java:706) at org.apache.beehive.netui.tomcat.PageflowValve.logout(PageflowValve.java:127) at org.apache.beehive.netui.tomcat.PageflowHelperImpl.logout(PageflowHelperImpl.java:51) at org.apache.beehive.netui.tomcat.TomcatServletContainerAdapter.logout(TomcatServletContainerAdapter.java:140) at org.apache.beehive.netui.pageflow.internal.DefaultLoginHandler.logout(DefaultLoginHandler.java:61) at org.apache.beehive.netui.pageflow.FlowController.logout(FlowController.java:202) at security.Controller.doLogout(Controller.java:112) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.beehive.netui.pageflow.FlowController.invokeActionMethod(FlowController.java:863) at org.apache.beehive.netui.pageflow.FlowController.getActionMethodForward(FlowController.java:793) at org.apache.beehive.netui.pageflow.FlowController.internalExecute(FlowController.java:463) at org.apache.beehive.netui.pageflow.PageFlowController.internalExecute(PageFlowController.java:290) at org.apache.beehive.netui.pageflow.FlowController.execute(FlowController.java:338) at org.apache.beehive.netui.pageflow.internal.FlowControllerAction.execute(FlowControllerAction.java:51) at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419) at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.access$201(PageFlowRequestProcessor.java:96) at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor$ActionRunner.execute(PageFlowRequestProcessor.java:2025) at org.apache.beehive.netui.pageflow.interceptor.action.internal.ActionInterceptors.wrapAction(ActionInterceptors.java:90) at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.processActionPerform(PageFlowRequestProcessor.java:2096) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224) at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.processInternal(PageFlowRequestProcessor.java:550) at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.process(PageFlowRequestProcessor.java:838) at org.apache.beehive.netui.pageflow.AutoRegisterActionServlet.process(AutoRegisterActionServlet.java:634) at org.apache.beehive.netui.pageflow.PageFlowActionServlet.process(PageFlowActionServlet.java:156) at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414) at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301) at org.apache.beehive.netui.pageflow.internal.DefaultForwardRedirectHandler.forward(DefaultForwardRedirectHandler.java:127) at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.doForward(PageFlowRequestProcessor.java:1797) at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.processForwardConfig(PageFlowRequestProcessor.java:1670) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229) at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.processInternal(PageFlowRequestProcessor.java:550) at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.process(PageFlowRequestProcessor.java:838) at org.apache.beehive.netui.pageflow.AutoRegisterActionServlet.process(AutoRegisterActionServlet.java:634) at org.apache.beehive.netui.pageflow.PageFlowActionServlet.process(PageFlowActionServlet.java:156) at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414) at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301) at org.apache.beehive.netui.pageflow.internal.DefaultForwardRedirectHandler.forward(DefaultForwardRedirectHandler.java:127) at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.doForward(PageFlowRequestProcessor.java:1797) at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.processSharedFlowMapping(PageFlowRequestProcessor.java:1418) at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.processMapping(PageFlowRequestProcessor.java:1219) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:191) at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.processInternal(PageFlowRequestProcessor.java:550) at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.process(PageFlowRequestProcessor.java:838) at org.apache.beehive.netui.pageflow.AutoRegisterActionServlet.process(AutoRegisterActionServlet.java:634) at org.apache.beehive.netui.pageflow.PageFlowActionServlet.process(PageFlowActionServlet.java:156) at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414) at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:524) at org.apache.beehive.netui.tomcat.PageflowValve.invoke(PageflowValve.java:94) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) at java.lang.Thread.run(Unknown Source) > HTTP session gets created after the pageflow application invalidates it > (logout) and the response is committed, resulting in IllegalStateException > -------------------------------------------------------------------------------------------------------------------------------------------------- > > Key: BEEHIVE-873 > URL: http://issues.apache.org/jira/browse/BEEHIVE-873 > Project: Beehive > Type: Bug > Components: NetUI > Versions: v1m1, V1Beta, V1Alpha > Environment: Beehive SVN latest, > Tomcat 5.5.7 and Tomcat 5.5.9 > Reporter: Abdessattar Sassi > Assignee: Alejandro Ramirez > Attachments: session-patch.txt > > The application scenarion is as following: > - A JSP calls an action in a page flow controller that does the logout from > the application. > - The pageflow logout action is as following: > /** > */ > @Jpf.Action( > forwards = { > @Jpf.Forward(name = "success", path = "/bye.html", > redirect = true) > } > ) > protected Forward doLogout() { > // Logout but if running with Single Sign-On in the app server, do not > // invalidate all the sessions. > // The current application session will be invalidated manually right > // after the logout. > logout(false); > HttpSession session = getRequest().getSession(false); > if (session != null) { > session.invalidate(); > } > return new Forward("success"); > } > - The HTTP session get invalidated by the application, it actually also gets > invalidated by the Tomcat server adapter PageFlowValve in logout(). > - The request processing in PageFlowrequestProcessor, > private void processInternal( HttpServletRequest request, HttpServletResponse > response ) > ends teh processing by calling the DeferredSessionStorageHandler public void > applyChanges( RequestContext context ) method which does the following: > if ( changedAttrs != null ) > { > HttpSession session = request.getSession(); > - The call to getSession() results in an attempt to create the Session object > again even though the response has been committed by Tomcat. Such conditions > result in an IllegalStateException thrown by Tomcat and an error page to the > user. > A suggested good behavior (to be validated by the beehive developers) is to > obtain the session without creating it and checking if a session exists or > not before applying the changes: > if ( changedAttrs != null ) > { > HttpSession session = request.getSession(false); > if ( session != null ) > { > A patch to the DeferredSessionStorageHandler class is provided with this > issue report. The patch was tested and now the application works just like > expected. After logout, the bye.html page is displayed and no more session > exists in the Tomcat server after logout. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira
