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

commit 2877a656e0b17c4cebf5518e4cf3dd40edb485d3
Author: Lukasz Lenart <lukaszlen...@apache.org>
AuthorDate: Wed May 2 08:04:15 2018 +0200

    Avoids parsing namespace when using existing namespace
---
 .../src/main/java/com/opensymphony/xwork2/ActionChainResult.java | 9 +++------
 core/src/main/java/org/apache/struts2/result/PostbackResult.java | 1 +
 .../org/apache/struts2/result/ServletActionRedirectResult.java   | 1 +
 .../main/java/org/apache/struts2/result/StrutsResultSupport.java | 4 +++-
 .../struts2/portlet/result/PortletActionRedirectResult.java      | 1 +
 5 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/core/src/main/java/com/opensymphony/xwork2/ActionChainResult.java 
b/core/src/main/java/com/opensymphony/xwork2/ActionChainResult.java
index 1550eb9..b842897 100644
--- a/core/src/main/java/com/opensymphony/xwork2/ActionChainResult.java
+++ b/core/src/main/java/com/opensymphony/xwork2/ActionChainResult.java
@@ -201,13 +201,10 @@ public class ActionChainResult implements Result {
      * @param invocation the DefaultActionInvocation calling the action call 
stack
      */
     public void execute(ActionInvocation invocation) throws Exception {
-        // if the finalNamespace wasn't explicitly defined, assume the current 
one
-        if (this.namespace == null) {
-            this.namespace = invocation.getProxy().getNamespace();
-        }
-
         ValueStack stack = ActionContext.getContext().getValueStack();
-        String finalNamespace = TextParseUtil.translateVariables(namespace, 
stack);
+        String finalNamespace = this.namespace != null
+                ? TextParseUtil.translateVariables(namespace, stack)
+                : invocation.getProxy().getNamespace();
         String finalActionName = TextParseUtil.translateVariables(actionName, 
stack);
         String finalMethodName = this.methodName != null
                 ? TextParseUtil.translateVariables(this.methodName, stack)
diff --git a/core/src/main/java/org/apache/struts2/result/PostbackResult.java 
b/core/src/main/java/org/apache/struts2/result/PostbackResult.java
index d040fbb..4c1e52a 100644
--- a/core/src/main/java/org/apache/struts2/result/PostbackResult.java
+++ b/core/src/main/java/org/apache/struts2/result/PostbackResult.java
@@ -136,6 +136,7 @@ public class PostbackResult extends StrutsResultSupport {
             actionName = conditionalParse(actionName, invocation);
             if (namespace == null) {
                 namespace = invocation.getProxy().getNamespace();
+                parseLocation = false;
             } else {
                 namespace = conditionalParse(namespace, invocation);
             }
diff --git 
a/core/src/main/java/org/apache/struts2/result/ServletActionRedirectResult.java 
b/core/src/main/java/org/apache/struts2/result/ServletActionRedirectResult.java
index b5356ad..5b800e2 100644
--- 
a/core/src/main/java/org/apache/struts2/result/ServletActionRedirectResult.java
+++ 
b/core/src/main/java/org/apache/struts2/result/ServletActionRedirectResult.java
@@ -161,6 +161,7 @@ public class ServletActionRedirectResult extends 
ServletRedirectResult implement
         actionName = conditionalParse(actionName, invocation);
         if (namespace == null) {
             namespace = invocation.getProxy().getNamespace();
+            parseLocation = false;
         } else {
             namespace = conditionalParse(namespace, invocation);
         }
diff --git 
a/core/src/main/java/org/apache/struts2/result/StrutsResultSupport.java 
b/core/src/main/java/org/apache/struts2/result/StrutsResultSupport.java
index a21e095..d5307d2 100644
--- a/core/src/main/java/org/apache/struts2/result/StrutsResultSupport.java
+++ b/core/src/main/java/org/apache/struts2/result/StrutsResultSupport.java
@@ -122,6 +122,8 @@ public abstract class StrutsResultSupport implements 
Result, StrutsStatics {
     /** use UTF-8 as this is the recommended encoding by W3C to avoid 
incompatibilities. */
     public static final String DEFAULT_URL_ENCODING = "UTF-8";
 
+    protected boolean parseLocation = true;
+
     private boolean parse;
     private boolean encode;
     private String location;
@@ -200,7 +202,7 @@ public abstract class StrutsResultSupport implements 
Result, StrutsStatics {
      * @throws Exception if an error occurs while executing the result.
      */
     public void execute(ActionInvocation invocation) throws Exception {
-        lastFinalLocation = conditionalParse(location, invocation);
+        lastFinalLocation = parseLocation ? conditionalParse(location, 
invocation) : location;
         doExecute(lastFinalLocation, invocation);
     }
 
diff --git 
a/plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletActionRedirectResult.java
 
b/plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletActionRedirectResult.java
index 4b561ca..db4f98a 100644
--- 
a/plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletActionRedirectResult.java
+++ 
b/plugins/portlet/src/main/java/org/apache/struts2/portlet/result/PortletActionRedirectResult.java
@@ -179,6 +179,7 @@ public class PortletActionRedirectResult extends 
PortletResult {
                }
                if (namespace == null) {
                        namespace = invocation.getProxy().getNamespace();
+                       parseLocation = false;
                } else {
                        namespace = conditionalParse(namespace, invocation);
                }

Reply via email to