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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]