You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Matthieu Chase Heimer (Created) (JIRA)" <de...@myfaces.apache.org> on 2012/03/16 01:12:37 UTC

[jira] [Created] (TRINIDAD-2243) Session timeouts result in a java.lang.IllegalArgumentException: null source instead of javax.faces.application.ViewExpiredException

Session timeouts result in a java.lang.IllegalArgumentException: null source instead of javax.faces.application.ViewExpiredException
------------------------------------------------------------------------------------------------------------------------------------

                 Key: TRINIDAD-2243
                 URL: https://issues.apache.org/jira/browse/TRINIDAD-2243
             Project: MyFaces Trinidad
          Issue Type: Bug
    Affects Versions: 2.0.1-core
         Environment: Windows 7
1.7.0_02
WebLogic 12
JSF 2.1 - Mojarra 2.1.5
Trinidad 2.0.1
            Reporter: Matthieu Chase Heimer


Any session timeout results in a java.lang.IllegalArgumentException instead of javax.faces.application.ViewExpiredException when interacting with an already rendered page.

My test case is:
<?xml version='1.0' encoding='UTF-8' ?>
<tr:document xmlns="http://www.w3.org/1999/xhtml"
             xmlns:h="http://java.sun.com/jsf/html"
             xmlns:tr="http://myfaces.apache.org/trinidad"
             title="Trinidad Test">
    
    <h:form>
        <h:inputText value="#{sessionScope.vaule}"/>
        <h:commandButton value="Submit"/>
    </h:form>
    
</tr:document>

To duplicate the problem. Load the page, submit a value, wait longer than the session timeout value, attempt to submit a new value.

The result is an error page that says:
An Error Occurred:
null source

Stack Trace:
java.lang.IllegalArgumentException: null source
	at java.util.EventObject.<init>(EventObject.java:56)
	at javax.faces.event.SystemEvent.<init>(SystemEvent.java:71)
	at javax.faces.event.ComponentSystemEvent.<init>(ComponentSystemEvent.java:73)
	at javax.faces.event.PostRestoreStateEvent.<init>(PostRestoreStateEvent.java:73)
	at com.sun.faces.lifecycle.RestoreViewPhase.deliverPostRestoreStateEvent(RestoreViewPhase.java:271)
	at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:257)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593)
	at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:242)
	at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:216)
	at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:132)
	at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:352)
	at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
	at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl._doFilterImpl(TrinidadFilterImpl.java:293)
	at org.apache.myfaces.trinidadinternal.webapp.TrinidadFilterImpl.doFilter(TrinidadFilterImpl.java:199)
	at org.apache.myfaces.trinidad.webapp.TrinidadFilter.doFilter(TrinidadFilter.java:92)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
	at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:74)
	at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3288)
	at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3254)
	at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
	at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
	at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
	at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2163)
	at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2089)
	at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2074)
	at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1512)
	at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:254)
	at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
	at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)


Also in the console window there will be:
Mar 15, 2012 6:32:23 PM org.apache.myfaces.trinidadinternal.application.StateManagerImpl restoreView
SEVERE: Could not find saved view state for token -8jkyfr8dt

The workaround is to modify the web.xml to include:
    <context-param>
        <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
        <param-value>client</param-value>
    </context-param>
    <context-param>
        <param-name>org.apache.myfaces.trinidad.CLIENT_STATE_METHOD</param-name>
        <param-value>all</param-value>
    </context-param>

TL;DR: Trinidad swallows the javax.faces.application.ViewExpiredException exception making it impossible to handle session timeouts when storing state on the server.



--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira