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

Reply via email to