[ 
https://issues.apache.org/jira/browse/WW-4134?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13696320#comment-13696320
 ] 

Jan Čustović commented on WW-4134:
----------------------------------

The configuration is not important in this case but "store" interceptor with 
operationMode AUTOMATIC is on top of the chain.

It is very simple to reproduce the problem. In my case there is a link mapped 
to /instructions which is configured like this
{code}
<action name="instructions">
        <result type="redirect">/sw/static/instructions.pdf</result>
</action>
{code}

which forwards to another url.

Now if I open my browser and clear all sessions (or open chrome in incognito 
window or do a wget) and try to open /my-app/instructions I get the above error 
because session is not created yet because store interceptor is putting info in 
session that does not exist yet.

The workaround is to force session creation in filters before struts2 filter.

The store interceptor should check to see if session exists before trying to 
put/get from it.
                
> MessageStoreInterceptor java.lang.IllegalStateException if there is no session
> ------------------------------------------------------------------------------
>
>                 Key: WW-4134
>                 URL: https://issues.apache.org/jira/browse/WW-4134
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Core Interceptors
>    Affects Versions: 2.3.14.3
>            Reporter: Jan Čustović
>             Fix For: 2.3.16
>
>
> When there is no session the following error happens on {code:xml}<result 
> type="redirect">{code}.
> {code}
> [org.apache.struts2.dispatcher.Dispatcher.error:38] []  - Exception occurred 
> during processing request: Cannot create a session after the response has 
> been committed
> java.lang.IllegalStateException: Cannot create a session after the response 
> has been committed
>         at 
> org.apache.catalina.connector.Request.doGetSession(Request.java:2880) 
> ~[catalina.jar:7.0.37]
>         at 
> org.apache.catalina.connector.Request.getSession(Request.java:2315) 
> ~[catalina.jar:7.0.37]
>         at 
> org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:898)
>  ~[catalina.jar:7.0.37]
>         at 
> javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:229)
>  ~[servlet-api.jar:na]
>         at 
> javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:229)
>  ~[servlet-api.jar:na]
>         at 
> javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:229)
>  ~[servlet-api.jar:na]
>         at org.apache.struts2.dispatcher.SessionMap.put(SessionMap.java:177) 
> ~[struts2-core-2.3.14.3.jar:2.3.14.3]
>         at 
> org.apache.struts2.interceptor.MessageStoreInterceptor.after(MessageStoreInterceptor.java:279)
>  ~[struts2-core-2.3.14.3.jar:2.3.14.3]
>         at 
> org.apache.struts2.interceptor.MessageStoreInterceptor.intercept(MessageStoreInterceptor.java:195)
>  ~[struts2-core-2.3.14.3.jar:2.3.14.3]
>         at 
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
>  ~[xwork-core-2.3.14.3.jar:2.3.14.3]
> {code}
> This always happens if you wget your resource that has redirect.
> The interceptor should check if the session is available and only then 
> perform message storing.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to