This is an automated email from the ASF dual-hosted git repository.
lukaszlenart pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/struts.git
The following commit(s) were added to refs/heads/master by this push:
new a21bd994e WW-5238 Uses proper order of mapping functions to support
action: prefix
a21bd994e is described below
commit a21bd994eb56bf734f25e4a4590833a3258aa1b8
Author: Lukasz Lenart <[email protected]>
AuthorDate: Thu Oct 6 08:54:14 2022 +0200
WW-5238 Uses proper order of mapping functions to support action: prefix
---
.../xwork2/config/entities/PackageConfig.java | 14 +--
.../dispatcher/mapper/DefaultActionMapper.java | 2 +-
.../dispatcher/mapper/DefaultActionMapperTest.java | 115 +++++++++------------
3 files changed, 50 insertions(+), 81 deletions(-)
diff --git
a/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
b/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
index 4d16ee81f..9174e651b 100644
---
a/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
+++
b/core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java
@@ -20,26 +20,18 @@ package com.opensymphony.xwork2.config.entities;
import com.opensymphony.xwork2.util.location.Located;
import com.opensymphony.xwork2.util.location.Location;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
import java.io.Serializable;
import java.util.*;
-
/**
* Configuration for Package.
*
* <p>
* In the xml configuration file this is defined as the <code>package</code>
tag.
* </p>
- *
- * @author Rainer Hermanns
- * @version $Revision$
*/
-public class PackageConfig extends Located implements Comparable,
Serializable, InterceptorLocator {
-
- private static final Logger LOG =
LogManager.getLogger(PackageConfig.class);
+public class PackageConfig extends Located implements
Comparable<PackageConfig>, Serializable, InterceptorLocator {
protected Map<String, ActionConfig> actionConfigs;
protected Map<String, ResultConfig> globalResultConfigs;
@@ -422,8 +414,7 @@ public class PackageConfig extends Located implements
Comparable, Serializable,
return "PackageConfig: [" + name + "] for namespace [" + namespace +
"] with parents [" + parents + "]";
}
- public int compareTo(Object o) {
- PackageConfig other = (PackageConfig) o;
+ public int compareTo(PackageConfig other) {
String full = namespace + "!" + name;
String otherFull = other.namespace + "!" + other.name;
@@ -443,7 +434,6 @@ public class PackageConfig extends Located implements
Comparable, Serializable,
public static class Builder implements InterceptorLocator {
protected PackageConfig target;
- private boolean strictDMI = true;
public Builder(String name) {
target = new PackageConfig(name);
diff --git
a/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java
b/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java
index 9c09e187e..98fec5316 100644
---
a/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java
+++
b/core/src/main/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapper.java
@@ -289,8 +289,8 @@ public class DefaultActionMapper implements ActionMapper {
}
parseNameAndNamespace(uri, mapping, configManager);
- extractMethodName(mapping, configManager);
handleSpecialParameters(request, mapping);
+ extractMethodName(mapping, configManager);
return parseActionName(mapping);
}
diff --git
a/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java
b/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java
index 479494b16..a9d01eec7 100644
---
a/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java
+++
b/core/src/test/java/org/apache/struts2/dispatcher/mapper/DefaultActionMapperTest.java
@@ -20,15 +20,15 @@ package org.apache.struts2.dispatcher.mapper;
import com.mockobjects.servlet.MockHttpServletRequest;
import com.opensymphony.xwork2.ActionContext;
-import com.opensymphony.xwork2.Result;
import com.opensymphony.xwork2.config.Configuration;
import com.opensymphony.xwork2.config.ConfigurationManager;
+import com.opensymphony.xwork2.config.entities.ActionConfig;
import com.opensymphony.xwork2.config.entities.PackageConfig;
+import com.opensymphony.xwork2.config.entities.ResultConfig;
import com.opensymphony.xwork2.config.impl.DefaultConfiguration;
import com.opensymphony.xwork2.inject.Container;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.StrutsInternalTestCase;
-import org.apache.struts2.result.StrutsResultSupport;
import org.apache.struts2.views.jsp.StrutsMockHttpServletRequest;
import java.util.Arrays;
@@ -38,7 +38,6 @@ import java.util.Map;
/**
* DefaultActionMapper test case.
- *
*/
public class DefaultActionMapperTest extends StrutsInternalTestCase {
@@ -46,6 +45,7 @@ public class DefaultActionMapperTest extends
StrutsInternalTestCase {
private ConfigurationManager configManager;
private Configuration config;
+ @SuppressWarnings("rawtypes")
protected void setUp() throws Exception {
super.setUp();
req = new MockHttpServletRequest();
@@ -79,6 +79,7 @@ public class DefaultActionMapperTest extends
StrutsInternalTestCase {
assertNull(mapping.getMethod());
}
+ @SuppressWarnings("rawtypes")
public void testGetMappingWithMethod() {
req.setupGetParameterMap(new HashMap());
req.setupGetRequestURI("/my/namespace/actionName!add.action");
@@ -157,7 +158,6 @@ public class DefaultActionMapperTest extends
StrutsInternalTestCase {
}
-
public void testGetMappingWithNamespaceSlash() {
req.setupGetRequestURI("/my-hh/abc.action");
@@ -256,6 +256,7 @@ public class DefaultActionMapperTest extends
StrutsInternalTestCase {
assertNull(mapping);
}
+ @SuppressWarnings("rawtypes")
public void testGetUri() {
req.setupGetParameterMap(new HashMap());
req.setupGetRequestURI("/my/namespace/actionName.action");
@@ -268,6 +269,7 @@ public class DefaultActionMapperTest extends
StrutsInternalTestCase {
assertEquals("/my/namespace/actionName.action",
mapper.getUriFromActionMapping(mapping));
}
+ @SuppressWarnings("rawtypes")
public void testGetUriWithSemicolonPresent() {
req.setupGetParameterMap(new HashMap());
req.setupGetRequestURI("/my/namespace/actionName.action;abc=123rty56");
@@ -280,6 +282,7 @@ public class DefaultActionMapperTest extends
StrutsInternalTestCase {
assertEquals("/my/namespace/actionName.action",
mapper.getUriFromActionMapping(mapping));
}
+ @SuppressWarnings("rawtypes")
public void testGetUriWithMethod() {
req.setupGetParameterMap(new HashMap());
req.setupGetRequestURI("/my/namespace/actionName!add.action");
@@ -294,7 +297,7 @@ public class DefaultActionMapperTest extends
StrutsInternalTestCase {
}
public void testGetUriWithOriginalExtension() {
- ActionMapping mapping = new ActionMapping("actionName", "/ns", null,
new HashMap<String, Object>());
+ ActionMapping mapping = new ActionMapping("actionName", "/ns", null,
new HashMap<>());
ActionMapping orig = new ActionMapping();
orig.setExtension("foo");
@@ -304,6 +307,7 @@ public class DefaultActionMapperTest extends
StrutsInternalTestCase {
assertEquals("/ns/actionName.foo",
mapper.getUriFromActionMapping(mapping));
}
+ @SuppressWarnings("rawtypes")
public void testGetMappingWithNoExtension() {
req.setupGetParameterMap(new HashMap());
req.setupGetRequestURI("/my/namespace/actionName");
@@ -320,6 +324,7 @@ public class DefaultActionMapperTest extends
StrutsInternalTestCase {
assertNull(mapping.getMethod());
}
+ @SuppressWarnings("rawtypes")
public void testGetMappingWithNoExtensionButUriHasExtension() {
req.setupGetParameterMap(new HashMap());
req.setupGetRequestURI("/my/namespace/actionName.html");
@@ -524,88 +529,66 @@ public class DefaultActionMapperTest extends
StrutsInternalTestCase {
assertEquals("myAction", actionMapping.getName());
}
- public void testRedirectPrefix() {
- Map<String, Object> parameterMap = new HashMap<>();
- parameterMap.put("redirect:" + "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();
- assertNull(result);
- }
-
- public void testUnsafeRedirectPrefix() {
+ public void testActionPrefix() {
Map<String, Object> parameterMap = new HashMap<>();
- parameterMap.put("redirect:" + "http://%{3*4}", "");
+ parameterMap.put("action:" + "next", "");
StrutsMockHttpServletRequest request = new
StrutsMockHttpServletRequest();
- request.setupGetServletPath("/someServletPath.action");
+ request.setupGetServletPath("/index.action");
request.setParameterMap(parameterMap);
DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
defaultActionMapper.setContainer(container);
ActionMapping actionMapping = defaultActionMapper.getMapping(request,
configManager);
- Result result = actionMapping.getResult();
- assertNull(result);
+ assertNotNull(actionMapping);
+ assertEquals("/", actionMapping.getNamespace());
+ assertEquals("index", actionMapping.getName());
+ assertNull(actionMapping.getMethod());
}
- public void testRedirectActionPrefix() {
- Map<String, Object> parameterMap = new HashMap<>();
- parameterMap.put("redirectAction:" + "myAction", "");
-
- StrutsMockHttpServletRequest request = new
StrutsMockHttpServletRequest();
- request.setupGetServletPath("/someServletPath.action");
- request.setParameterMap(parameterMap);
-
- DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
- defaultActionMapper.setContainer(container);
- ActionMapping actionMapping = defaultActionMapper.getMapping(request,
configManager);
+ public void testActionPrefixWhenAllowed() {
+ config = new DefaultConfiguration();
+ PackageConfig pkg = new PackageConfig.Builder("test")
+ .namespace("/test")
+ .addActionConfig("execute", new ActionConfig.Builder("test",
"index", "org.test.TestAction")
+ .methodName("execute")
+ .addAllowedMethod("execute")
+ .build())
+ .addActionConfig("next", new ActionConfig.Builder("test", "next",
"org.test.TestAction")
+ .methodName("next")
+ .addAllowedMethod("next")
+ .addResultConfig(new ResultConfig.Builder("next",
"org.test.TestResult")
+ .build())
+ .build())
+ .build();
+
+ config.addPackageConfig("test", pkg);
- StrutsResultSupport result = (StrutsResultSupport)
actionMapping.getResult();
- assertNull(result);
- }
+ configManager = new ConfigurationManager(Container.DEFAULT_NAME) {
+ public Configuration getConfiguration() {
+ return config;
+ }
+ };
- public void testUnsafeRedirectActionPrefix() {
Map<String, Object> parameterMap = new HashMap<>();
- parameterMap.put("redirectAction:" + "%{3*4}", "");
+ parameterMap.put("action:" + "next", "");
StrutsMockHttpServletRequest request = new
StrutsMockHttpServletRequest();
- request.setupGetServletPath("/someServletPath.action");
+ request.setupGetServletPath("/test/index.action");
request.setParameterMap(parameterMap);
DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
defaultActionMapper.setContainer(container);
- ActionMapping actionMapping = defaultActionMapper.getMapping(request,
configManager);
-
-
- StrutsResultSupport result = (StrutsResultSupport)
actionMapping.getResult();
- assertNull(result);
- }
-
- public void testRedirectActionPrefixWithEmptyExtension() {
- Map<String, Object> parameterMap = new HashMap<>();
- parameterMap.put("redirectAction:" + "myAction", "");
-
- StrutsMockHttpServletRequest request = new
StrutsMockHttpServletRequest();
- request.setupGetServletPath("/someServletPath");
- request.setParameterMap(parameterMap);
+ defaultActionMapper.setAllowActionPrefix("true");
- DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
- defaultActionMapper.setContainer(container);
- defaultActionMapper.setExtensions(",,");
ActionMapping actionMapping = defaultActionMapper.getMapping(request,
configManager);
-
- StrutsResultSupport result = (StrutsResultSupport)
actionMapping.getResult();
- assertNull(result);
+ assertNotNull(actionMapping);
+ assertEquals("/test", actionMapping.getNamespace());
+ assertEquals("next", actionMapping.getName());
+ assertEquals("next", actionMapping.getMethod());
}
public void testCustomActionPrefix() {
@@ -617,11 +600,7 @@ public class DefaultActionMapperTest extends
StrutsInternalTestCase {
request.setupGetServletPath("/someServletPath.action");
DefaultActionMapper defaultActionMapper = new DefaultActionMapper();
- defaultActionMapper.addParameterAction("foo", new ParameterAction() {
- public void execute(String key, ActionMapping mapping) {
- mapping.setName("myAction");
- }
- });
+ defaultActionMapper.addParameterAction("foo", (key, mapping) ->
mapping.setName("myAction"));
ActionMapping actionMapping = defaultActionMapper.getMapping(request,
configManager);
assertEquals(actionMapping.getName(), "myAction");