You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by mr...@apache.org on 2006/12/28 01:55:28 UTC

svn commit: r490622 - in /struts/struts2/trunk/core/src: main/java/org/apache/struts2/dispatcher/mapper/ test/java/org/apache/struts2/dispatcher/mapper/ test/java/org/apache/struts2/views/jsp/

Author: mrdon
Date: Wed Dec 27 16:55:27 2006
New Revision: 490622

URL: http://svn.apache.org/viewvc?view=rev&rev=490622
Log:
Fix the redirect predirect prefix in the default action mapper
WW-1571

Modified:
    struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java
    struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockHttpServletResponse.java

Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java?view=diff&rev=490622&r1=490621&r2=490622
==============================================================================
--- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java (original)
+++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java Wed Dec 27 16:55:27 2006
@@ -39,6 +39,7 @@
 import com.opensymphony.xwork2.config.ConfigurationManager;
 import com.opensymphony.xwork2.config.entities.PackageConfig;
 import com.opensymphony.xwork2.inject.Inject;
+import com.opensymphony.xwork2.inject.Container;
 
 /**
  * <!-- START SNIPPET: javadoc -->
@@ -177,6 +178,8 @@
     
     List extensions = new ArrayList() {{ add("action");}};
 
+    private Container container;
+
     public DefaultActionMapper() {
         prefixTrie = new PrefixTrie() {
             {
@@ -206,6 +209,7 @@
                 put(REDIRECT_PREFIX, new ParameterAction() {
                     public void execute(String key, ActionMapping mapping) {
                         ServletRedirectResult redirect = new ServletRedirectResult();
+                        container.inject(redirect);
                         redirect.setLocation(key.substring(REDIRECT_PREFIX
                                 .length()));
                         mapping.setResult(redirect);
@@ -217,6 +221,7 @@
                         String location = key.substring(REDIRECT_ACTION_PREFIX
                                 .length());
                         ServletRedirectResult redirect = new ServletRedirectResult();
+                        container.inject(redirect);
                         String extension = getDefaultExtension();
                         if (extension != null) {
                             location += "." + extension;
@@ -237,6 +242,11 @@
     @Inject(StrutsConstants.STRUTS_ENABLE_SLASHES_IN_ACTION_NAMES)
     public void setSlashesInActionNames(String allow) {
         allowSlashesInActionNames = "true".equals(allow);
+    }
+
+    @Inject
+    public void setContainer(Container container) {
+        this.container = container;
     }
 
     /*

Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java?view=diff&rev=490622&r1=490621&r2=490622
==============================================================================
--- struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java (original)
+++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java Wed Dec 27 16:55:27 2006
@@ -25,16 +25,24 @@
 
 import org.apache.struts2.StrutsConstants;
 import org.apache.struts2.StrutsTestCase;
+import org.apache.struts2.ServletActionContext;
 import org.apache.struts2.dispatcher.ServletRedirectResult;
 import org.apache.struts2.views.jsp.StrutsMockHttpServletRequest;
+import org.apache.struts2.views.jsp.StrutsMockHttpServletResponse;
 
 import com.mockobjects.servlet.MockHttpServletRequest;
+import com.mockobjects.dynamic.Mock;
 import com.opensymphony.xwork2.Result;
+import com.opensymphony.xwork2.DefaultActionInvocation;
+import com.opensymphony.xwork2.ActionInvocation;
+import com.opensymphony.xwork2.ActionContext;
 import com.opensymphony.xwork2.config.Configuration;
 import com.opensymphony.xwork2.config.ConfigurationManager;
 import com.opensymphony.xwork2.config.entities.PackageConfig;
 import com.opensymphony.xwork2.config.impl.DefaultConfiguration;
 
+import javax.servlet.http.HttpServletResponse;
+
 /**
  * DefaultActionMapper test case.
  *
@@ -273,19 +281,30 @@
 
     public void testRedirectPrefix() throws Exception {
         Map parameterMap = new HashMap();
-        parameterMap.put(DefaultActionMapper.REDIRECT_PREFIX + "www.google.com", "");
+        parameterMap.put(DefaultActionMapper.REDIRECT_PREFIX + "http://www.google.com", "");
 
         StrutsMockHttpServletRequest request = new StrutsMockHttpServletRequest();
         request.setupGetServletPath("/someServletPath.action");
         request.setParameterMap(parameterMap);
 
         DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
+        defaultActionMapper.setContainer(container);
         ActionMapping actionMapping = defaultActionMapper.getMapping(request, configManager);
 
         Result result = actionMapping.getResult();
         assertNotNull(result);
         assertTrue(result instanceof ServletRedirectResult);
 
+        Mock invMock = new Mock(ActionInvocation.class);
+        ActionInvocation inv = (ActionInvocation) invMock.proxy();
+        ActionContext ctx = ActionContext.getContext();
+        ctx.put(ServletActionContext.HTTP_REQUEST, request);
+        StrutsMockHttpServletResponse response = new StrutsMockHttpServletResponse();
+        ctx.put(ServletActionContext.HTTP_RESPONSE, response);
+        invMock.expectAndReturn("getInvocationContext", ctx);
+        invMock.expectAndReturn("getStack", ctx.getValueStack());
+        result.execute(inv);
+        assertEquals("http://www.google.com", response.getRedirectURL());
         //TODO: need to test location but there's noaccess to the property/method, unless we use reflection
     }
 

Modified: struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockHttpServletResponse.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockHttpServletResponse.java?view=diff&rev=490622&r1=490621&r2=490622
==============================================================================
--- struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockHttpServletResponse.java (original)
+++ struts/struts2/trunk/core/src/test/java/org/apache/struts2/views/jsp/StrutsMockHttpServletResponse.java Wed Dec 27 16:55:27 2006
@@ -35,6 +35,8 @@
 public class StrutsMockHttpServletResponse extends MockHttpServletResponse {
     private Locale locale;
     private PrintWriter writer;
+    private int status;
+    private String redirectURL;
 
     public Locale getLocale() {
         return locale;
@@ -44,6 +46,10 @@
         this.locale = locale;
     }
 
+    public String getContentType() {
+        return null;  //To change body of implemented methods use File | Settings | File Templates.
+    }
+
     public PrintWriter getWriter() throws IOException {
         if (writer == null)
             return new PrintWriter(new ByteArrayOutputStream());
@@ -51,6 +57,10 @@
             return writer;
     }
 
+    public void setCharacterEncoding(String string) {
+        //To change body of implemented methods use File | Settings | File Templates.
+    }
+
     public void setWriter(PrintWriter writer) {
         this.writer = writer;
     }
@@ -59,7 +69,30 @@
         return s;
     }
 
+    public String encodeRedirectURL(String s) {
+        return s;
+    }
+
     public String encodeUrl(String s) {
         return s;
+    }
+
+    public void setStatus(int i) {
+        this.status = i;
+        super.setStatus(i);
+    }
+
+    public int getStatus() {
+        return status;
+    }
+
+
+    public String getRedirectURL() {
+        return redirectURL;
+    }
+
+    public void sendRedirect(String redirectURL) throws IOException {
+        this.redirectURL = redirectURL;
+        super.sendRedirect(redirectURL);
     }
 }