Author: remm Date: Wed Jul 26 12:15:45 2017 New Revision: 1803038 URL: http://svn.apache.org/viewvc?rev=1803038&view=rev Log: 61345: Add a server listener that can be used to do system property replacement from the property source configured in the digester.
Modified: tomcat/trunk/java/org/apache/tomcat/util/digester/Digester.java tomcat/trunk/java/org/apache/tomcat/util/digester/LocalStrings.properties tomcat/trunk/webapps/docs/changelog.xml tomcat/trunk/webapps/docs/config/systemprops.xml Modified: tomcat/trunk/java/org/apache/tomcat/util/digester/Digester.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/digester/Digester.java?rev=1803038&r1=1803037&r2=1803038&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/digester/Digester.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/digester/Digester.java Wed Jul 26 12:15:45 2017 @@ -29,12 +29,17 @@ import java.util.EmptyStackException; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Properties; import java.util.PropertyPermission; +import java.util.Set; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; +import org.apache.catalina.Lifecycle; +import org.apache.catalina.LifecycleEvent; +import org.apache.catalina.LifecycleListener; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; import org.apache.tomcat.util.ExceptionUtils; @@ -307,6 +312,35 @@ public class Digester extends DefaultHan } } + + public static class SystemPropertyReplacementListener + implements LifecycleListener { + protected Log log = LogFactory.getLog(Digester.class); + protected StringManager sm = StringManager.getManager(Digester.class); + @Override + public void lifecycleEvent(LifecycleEvent event) { + if (propertySource != null && Lifecycle.BEFORE_INIT_EVENT.equals(event.getType())) { + IntrospectionUtils.PropertySource[] propertySources = + new IntrospectionUtils.PropertySource[] { propertySource }; + Properties properties = System.getProperties(); + Set<String> names = properties.stringPropertyNames(); + for (String name : names) { + String value = System.getProperty(name); + if (value != null) { + try { + String newValue = IntrospectionUtils.replaceProperties(value, null, propertySources); + if (value != newValue) { + System.setProperty(name, newValue); + } + } catch (Exception e) { + log.warn(sm.getString("digester.failedToUpdateSystemProperty", name, value), e); + } + } + } + } + } + } + // ------------------------------------------------------------- Properties Modified: tomcat/trunk/java/org/apache/tomcat/util/digester/LocalStrings.properties URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/digester/LocalStrings.properties?rev=1803038&r1=1803037&r2=1803038&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/digester/LocalStrings.properties (original) +++ tomcat/trunk/java/org/apache/tomcat/util/digester/LocalStrings.properties Wed Jul 26 12:15:45 2017 @@ -15,3 +15,4 @@ disgester.encodingInvalid=The encoding [{0}] is not recognised by the JRE and will be ignored digester.failedToUpdateAttributes=Attribute [{0}] failed to update and remains [{1}] +digester.failedToUpdateSystemProperty=System property [{0}] failed to update and remains [{1}] Modified: tomcat/trunk/webapps/docs/changelog.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1803038&r1=1803037&r2=1803038&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/changelog.xml (original) +++ tomcat/trunk/webapps/docs/changelog.xml Wed Jul 26 12:15:45 2017 @@ -52,6 +52,15 @@ decoded. Identified by FindBugs. (markt)</fix> </changelog> </subsection> + <subsection name="Coyote"> + <changelog> + <update> + <bug>61345</bug>: Add a server listener that can be used to do system + property replacement from the property source configured in the + digester. (remm) + </update> + </changelog> + </subsection> </section> <section name="Tomcat 9.0.0.M25 (markt)" rtext="release in progress"> <subsection name="Catalina"> Modified: tomcat/trunk/webapps/docs/config/systemprops.xml URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/config/systemprops.xml?rev=1803038&r1=1803037&r2=1803038&view=diff ============================================================================== --- tomcat/trunk/webapps/docs/config/systemprops.xml (original) +++ tomcat/trunk/webapps/docs/config/systemprops.xml Wed Jul 26 12:15:45 2017 @@ -45,6 +45,10 @@ Required to have a public constructor with no arguments.</p> <p>Use this to add a property source, that will be invoked when <code>${parameter}</code> denoted parameters are found in the XML files that Tomcat parses.</p> + <p>Property replacement from the specified property source on the JVM + system properties can also be done by adding the + <code>org.apache.tomcat.util.digester.Digester$SystemPropertyReplacementListener</code> + listener as a Server listener in the container.</p> </property> </properties> --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org