Author: lukaszlenart
Date: Sat Mar 17 20:08:37 2012
New Revision: 1301989

URL: http://svn.apache.org/viewvc?rev=1301989&view=rev
Log:
WW-3773 recreates HttpSession and SessionMap if HttpSession doesn't exist

Modified:
    
struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/CreateSessionInterceptor.java
    
struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/CreateSessionInterceptorTest.java

Modified: 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/CreateSessionInterceptor.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/CreateSessionInterceptor.java?rev=1301989&r1=1301988&r2=1301989&view=diff
==============================================================================
--- 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/CreateSessionInterceptor.java
 (original)
+++ 
struts/struts2/trunk/core/src/main/java/org/apache/struts2/interceptor/CreateSessionInterceptor.java
 Sat Mar 17 20:08:37 2012
@@ -21,19 +21,21 @@
 
 package org.apache.struts2.interceptor;
 
-import org.apache.struts2.ServletActionContext;
-
 import com.opensymphony.xwork2.ActionInvocation;
 import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
 import com.opensymphony.xwork2.util.logging.Logger;
 import com.opensymphony.xwork2.util.logging.LoggerFactory;
+import org.apache.struts2.ServletActionContext;
+import org.apache.struts2.dispatcher.SessionMap;
+
+import javax.servlet.http.HttpSession;
 
 /**
  * <!-- START SNIPPET: description -->
  *
- * This interceptor creates the HttpSession.
+ * This interceptor creates the HttpSession if it doesn't exist, also 
SessionMap is recreated and put in ServletActionContext.
  * <p/>
- * This is particular usefull when using the &lt;@s.token&gt; tag in 
freemarker templates.
+ * This is particular useful when using the &lt;@s.token&gt; tag in freemarker 
templates.
  * The tag <b>do</b> require that a HttpSession is already created since 
freemarker commits
  * the response to the client immediately.
  *
@@ -88,11 +90,14 @@ public class CreateSessionInterceptor ex
      * @see 
com.opensymphony.xwork2.interceptor.Interceptor#intercept(com.opensymphony.xwork2.ActionInvocation)
      */
     public String intercept(ActionInvocation invocation) throws Exception {
-        if (LOG.isDebugEnabled()) {
-            LOG.debug("Creating HttpSession");
+        HttpSession httpSession = 
ServletActionContext.getRequest().getSession(false);
+        if (httpSession == null) {
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Creating new HttpSession and new SessionMap in 
ServletActionContext");
+            }
+            ServletActionContext.getRequest().getSession(true);
+            ServletActionContext.getContext().setSession(new 
SessionMap<String, Object>(ServletActionContext.getRequest()));
         }
-        
-        ServletActionContext.getRequest().getSession(true);
         return invocation.invoke();
     }
 

Modified: 
struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/CreateSessionInterceptorTest.java
URL: 
http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/CreateSessionInterceptorTest.java?rev=1301989&r1=1301988&r2=1301989&view=diff
==============================================================================
--- 
struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/CreateSessionInterceptorTest.java
 (original)
+++ 
struts/struts2/trunk/core/src/test/java/org/apache/struts2/interceptor/CreateSessionInterceptorTest.java
 Sat Mar 17 20:08:37 2012
@@ -21,15 +21,14 @@
 
 package org.apache.struts2.interceptor;
 
-import javax.servlet.http.HttpServletRequest;
-
+import com.opensymphony.xwork2.mock.MockActionInvocation;
 import org.apache.struts2.ServletActionContext;
 import org.apache.struts2.StrutsTestCase;
 import org.jmock.Mock;
 import org.jmock.core.constraint.IsEqual;
 import org.jmock.core.matcher.InvokeOnceMatcher;
 
-import com.opensymphony.xwork2.mock.MockActionInvocation;
+import javax.servlet.http.HttpServletRequest;
 
 /**
  * Test case for CreateSessionInterceptor.
@@ -39,7 +38,9 @@ public class CreateSessionInterceptorTes
 
     public void testCreateSession() throws Exception {
         Mock httpServletRequestMock = new Mock(HttpServletRequest.class);
+        httpServletRequestMock.expects(new 
InvokeOnceMatcher()).method("getSession").with(new IsEqual(Boolean.FALSE));
         httpServletRequestMock.expects(new 
InvokeOnceMatcher()).method("getSession").with(new IsEqual(Boolean.TRUE));
+        httpServletRequestMock.expects(new 
InvokeOnceMatcher()).method("getSession").with(new IsEqual(Boolean.FALSE));
         HttpServletRequest request = (HttpServletRequest) 
httpServletRequestMock.proxy();
 
         ServletActionContext.setRequest(request);


Reply via email to