This is an automated email from the ASF dual-hosted git repository. jfclere pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tomcat.git
The following commit(s) were added to refs/heads/master by this push: new e7896ee Allow recursive substitution of properties. Add tests and use indexOf("${") instead indexOf('$'). new ec5e948 Merge pull request #309 from jfclere/trunk e7896ee is described below commit e7896ee44a3c9f2cff4b93bca9ae6112917f6c88 Author: Jean-Frederic Clere <jfcl...@gmail.com> AuthorDate: Fri Jun 26 09:50:09 2020 +0200 Allow recursive substitution of properties. Add tests and use indexOf("${") instead indexOf('$'). --- java/org/apache/tomcat/util/IntrospectionUtils.java | 21 +++++++++++++++++++-- .../apache/tomcat/util/TestIntrospectionUtils.java | 12 ++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/java/org/apache/tomcat/util/IntrospectionUtils.java b/java/org/apache/tomcat/util/IntrospectionUtils.java index 78ab66f..9f12323 100644 --- a/java/org/apache/tomcat/util/IntrospectionUtils.java +++ b/java/org/apache/tomcat/util/IntrospectionUtils.java @@ -285,8 +285,17 @@ public final class IntrospectionUtils { public static String replaceProperties(String value, Hashtable<Object,Object> staticProp, PropertySource dynamicProp[], ClassLoader classLoader) { + return replaceProperties(value, staticProp, dynamicProp, classLoader, 0); + } - if (value.indexOf('$') < 0) { + private static String replaceProperties(String value, + Hashtable<Object,Object> staticProp, PropertySource dynamicProp[], + ClassLoader classLoader, int iterationCount) { + if (value.indexOf("${") < 0) { + return value; + } + if (iterationCount >=20) { + log.warn("System property failed to update and remains [" + value + "]"); return value; } StringBuilder sb = new StringBuilder(); @@ -332,7 +341,15 @@ public final class IntrospectionUtils { } if (prev < value.length()) sb.append(value.substring(prev)); - return sb.toString(); + String newval = sb.toString(); + if (newval.indexOf("${") < 0) { + return newval; + } + if (newval.equals(value)) + return value; + if (log.isDebugEnabled()) + log.debug("IntrospectionUtils.replaceProperties iter on: " + newval); + return replaceProperties(newval, staticProp, dynamicProp, classLoader, iterationCount+1); } private static String getProperty(String name, Hashtable<Object, Object> staticProp, diff --git a/test/org/apache/tomcat/util/TestIntrospectionUtils.java b/test/org/apache/tomcat/util/TestIntrospectionUtils.java index ed9fe39..73ea86a 100644 --- a/test/org/apache/tomcat/util/TestIntrospectionUtils.java +++ b/test/org/apache/tomcat/util/TestIntrospectionUtils.java @@ -143,5 +143,17 @@ public class TestIntrospectionUtils { Assert.assertEquals("abc${normal}xyz", IntrospectionUtils.replaceProperties( "abc${normal}xyz", properties, null, null)); + + properties.setProperty("my.ajp.port", "8009"); + properties.setProperty("tomcat.ajp.port", "${my.ajp.port}"); + Assert.assertEquals("8009", IntrospectionUtils.replaceProperties( + "${tomcat.ajp.port}", properties, null, null)); + + } + @Test + public void testReplacePropertiesRecursively() { + Properties properties = new Properties(); + properties.setProperty("replaceMe", "something ${replaceMe}"); + IntrospectionUtils.replaceProperties("${replaceMe}", properties, null, null); } } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org