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 <lukaszlen...@apache.org>
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");

Reply via email to