[ 
https://issues.apache.org/jira/browse/WW-4928?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16410886#comment-16410886
 ] 

ASF GitHub Bot commented on WW-4928:
------------------------------------

lukaszlenart closed pull request #217: WW-4928 Using the same default value 
delimiter
URL: https://github.com/apache/struts/pull/217
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git 
a/core/src/main/java/com/opensymphony/xwork2/config/providers/EnvsValueSubstitutor.java
 
b/core/src/main/java/com/opensymphony/xwork2/config/providers/EnvsValueSubstitutor.java
index 6aff302a1..f6cafefc4 100644
--- 
a/core/src/main/java/com/opensymphony/xwork2/config/providers/EnvsValueSubstitutor.java
+++ 
b/core/src/main/java/com/opensymphony/xwork2/config/providers/EnvsValueSubstitutor.java
@@ -18,6 +18,7 @@
  */
 package com.opensymphony.xwork2.config.providers;
 
+import org.apache.commons.text.StrLookup;
 import org.apache.commons.text.StrSubstitutor;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -26,20 +27,26 @@
 
     private static final Logger LOG = 
LogManager.getLogger(EnvsValueSubstitutor.class);
 
-    protected StrSubstitutor strSubstitutor;
+    protected StrSubstitutor envStrSubstitutor;
+    protected StrSubstitutor sysStrSubstitutor;
 
     public EnvsValueSubstitutor() {
-        strSubstitutor = new StrSubstitutor(System.getenv());
-        strSubstitutor.setVariablePrefix("${env.");
-        strSubstitutor.setVariableSuffix('}');
-        strSubstitutor.setValueDelimiter(":");
+        envStrSubstitutor = new StrSubstitutor(System.getenv());
+        envStrSubstitutor.setVariablePrefix("${env.");
+        envStrSubstitutor.setVariableSuffix('}');
+        envStrSubstitutor.setValueDelimiter(':');
+
+        sysStrSubstitutor = new 
StrSubstitutor(StrLookup.systemPropertiesLookup());
+        sysStrSubstitutor.setVariablePrefix("${");
+        sysStrSubstitutor.setVariableSuffix('}');
+        sysStrSubstitutor.setValueDelimiter(':');
     }
 
     @Override
     public String substitute(String value) {
         LOG.debug("Substituting value {} with proper System variable or 
environment variable", value);
 
-        String substituted = StrSubstitutor.replaceSystemProperties(value);
-        return strSubstitutor.replace(substituted);
+        String substituted = sysStrSubstitutor.replace(value);
+        return envStrSubstitutor.replace(substituted);
     }
 }
diff --git 
a/core/src/test/java/com/opensymphony/xwork2/config/providers/EnvsValueSubstitutorTest.java
 
b/core/src/test/java/com/opensymphony/xwork2/config/providers/EnvsValueSubstitutorTest.java
index da25e6524..0ecbd43d9 100644
--- 
a/core/src/test/java/com/opensymphony/xwork2/config/providers/EnvsValueSubstitutorTest.java
+++ 
b/core/src/test/java/com/opensymphony/xwork2/config/providers/EnvsValueSubstitutorTest.java
@@ -20,10 +20,9 @@
 
 import org.apache.struts2.StrutsInternalTestCase;
 
-
 public class EnvsValueSubstitutorTest extends StrutsInternalTestCase {
 
-    public void testSimpleValue() throws Exception {
+    public void testEnvSimpleValue() throws Exception {
         // given
         String expected = System.getenv("USER");
         ValueSubstitutor substitutor = new EnvsValueSubstitutor();
@@ -35,6 +34,45 @@ public void testSimpleValue() throws Exception {
         assertEquals(expected, actual);
     }
 
+    public void testEnvSimpleDefaultValue() throws Exception {
+        // given
+        String expected = "defaultValue";
+        ValueSubstitutor substitutor = new EnvsValueSubstitutor();
+
+        // when
+        String actual = substitutor.substitute("${env.UNKNOWN:" + expected + 
"}");
+
+        // then
+        assertEquals(expected, actual);
+    }
+
+    public void testSystemSimpleValue() throws Exception {
+        // given
+        String key = "sysPropKey";
+        String expected = "sysPropValue";
+        System.setProperty(key, expected);
+       
+        ValueSubstitutor substitutor = new EnvsValueSubstitutor();
+
+        // when
+        String actual = substitutor.substitute("${" + key + "}");
+
+        // then
+        assertEquals(expected, actual);
+    }
+
+    public void testSystemSimpleDefaultValue() throws Exception {
+        // given
+        String expected = "defaultValue";
+        ValueSubstitutor substitutor = new EnvsValueSubstitutor();
+
+        // when
+        String actual = substitutor.substitute("${UNKNOWN:" + expected + "}");
+
+        // then
+        assertEquals(expected, actual);
+    }
+
     public void testNoSubstitution() throws Exception {
         // given
         ValueSubstitutor substitutor = new EnvsValueSubstitutor();
@@ -45,4 +83,4 @@ public void testNoSubstitution() throws Exception {
         // then
         assertEquals("val1", actual);
     }
-}
\ No newline at end of file
+}


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


> Setting struts.devMode from system property not working as described
> --------------------------------------------------------------------
>
>                 Key: WW-4928
>                 URL: https://issues.apache.org/jira/browse/WW-4928
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 2.5.14.1
>         Environment: **Windows, Linux, Solaris
>            Reporter: Peter J Ford
>            Priority: Minor
>              Labels: documentation, easyfix
>             Fix For: 2.6
>
>
> According to 
> [http://struts.apache.org/core-developers/constant-configuration.html] the 
> struts.devMode setting can be read from environment strings or system 
> properties. This works correctly when setting from an environment string - 
> for example:
> {{<constant name="struts.devMode" value="${env.STRUTS_DEV_MODE:false}"/>}}
> However it does not work for system properties, such as setting 
> "-DstrutsDevMode=true" as a system property and this in struts.xml:
> {{<constant name="struts.devMode" value="${strutsDevMode:false}"/>}}
> Having dug through the source I found that this is to do with the way the 
> value substitutor is configured, and that using ":-" instead of ":" as the 
> separator string when using system properties will work:
> {{<constant name="struts.devMode" value="${strutsDevMode:-false}"/>}}
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to