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);
}
}