On 06/08/2020 12:26, [email protected] wrote:
> 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('$').
Change log?
Docs?
Or did I miss a commit somewhere?
Mark
> ---
> 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]
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]