This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
commit 127a3316e798f546d7a6cbd2535b2a6e8abd25bb Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Wed Oct 12 07:36:13 2022 +0200 CAMEL-18600: properties component - Allow to turn off nested placeholders --- components/camel-jasypt/src/main/docs/jasypt.adoc | 13 +++++++++---- .../camel/component/jasypt/JasyptPropertiesTest.java | 2 ++ .../jasypt/SpringJasyptBridgePropertiesAutowireTest.xml | 6 ++++++ .../component/jasypt/SpringJasyptBridgePropertiesTest.xml | 6 ++++++ .../component/jasypt/SpringJasyptProperties2Test.xml | 1 + .../camel/component/jasypt/SpringJasyptPropertiesTest.xml | 2 ++ .../org/apache/camel/core/xml/propertyPlaceholder.json | 1 + .../camel/core/xml/AbstractCamelContextFactoryBean.java | 3 +++ .../core/xml/CamelPropertyPlaceholderDefinition.java | 15 +++++++++++++++ 9 files changed, 45 insertions(+), 4 deletions(-) diff --git a/components/camel-jasypt/src/main/docs/jasypt.adoc b/components/camel-jasypt/src/main/docs/jasypt.adoc index b100c09d4f9..ba167e8484d 100644 --- a/components/camel-jasypt/src/main/docs/jasypt.adoc +++ b/components/camel-jasypt/src/main/docs/jasypt.adoc @@ -132,15 +132,15 @@ mandatory. See below for more details. == Protecting the master password The master password used by Jasypt must be provided, -so that it's capable of decrypting the values. However having this -master password out in the open may not be an ideal solution. Therefore -you could for example provide it as a JVM system property or as a OS +so that it's capable of decrypting the values. However, having this +master password out in the open may not be an ideal solution. Therefore, +you could for example provide it as a JVM system property or as an OS environment setting. If you decide to do so then the `password` option supports prefixes which dictates this. `sysenv:` means to lookup the OS system environment with the given key. `sys:` means to lookup a JVM system property. -For example you could provided the password before you start the +For example, you could provide the password before you start the application [source,bash] @@ -191,6 +191,8 @@ the properties. <property name="location" value="classpath:org/apache/camel/component/jasypt/myproperties.properties"/> <!-- and let it leverage the jasypt parser --> <property name="propertiesParser" ref="jasypt"/> + <!-- end enable nested placeholder --> + <property name="nestedPlaceholder" value="true"/> </bean> ----------------------------------------------------------------------------------------------------------- @@ -212,6 +214,7 @@ Jasypt. <!-- define the camel properties placeholder, and let it leverage jasypt --> <propertyPlaceholder id="properties" location="classpath:org/apache/camel/component/jasypt/myproperties.properties" + nestedPlaceholder="true" propertiesParserRef="jasypt"/> <route> <from uri="direct:start"/> @@ -254,6 +257,7 @@ up in the properties. <!-- define the camel properties placeholder, and let it leverage jasypt --> <propertyPlaceholder id="properties" location="blueprint:myblue" + nestedPlaceholder="true" propertiesParserRef="jasypt"/> <route> <from uri="direct:start"/> @@ -286,6 +290,7 @@ to Jasypt. <!-- define the camel properties placeholder, and let it leverage jasypt --> <propertyPlaceholder id="properties" location="classpath:org/apache/camel/component/jasypt/myproperties.properties" + nestedPlaceholder="true" propertiesParserRef="jasypt"/> <route> <from uri="direct:start"/> diff --git a/components/camel-jasypt/src/test/java/org/apache/camel/component/jasypt/JasyptPropertiesTest.java b/components/camel-jasypt/src/test/java/org/apache/camel/component/jasypt/JasyptPropertiesTest.java index 28b6e6359d9..88093eb740a 100644 --- a/components/camel-jasypt/src/test/java/org/apache/camel/component/jasypt/JasyptPropertiesTest.java +++ b/components/camel-jasypt/src/test/java/org/apache/camel/component/jasypt/JasyptPropertiesTest.java @@ -49,6 +49,8 @@ public class JasyptPropertiesTest extends CamelTestSupport { pc.setLocation("classpath:org/apache/camel/component/jasypt/myproperties.properties"); // and use the jasypt properties parser so we can decrypt values pc.setPropertiesParser(jasypt); + // end enable nested placeholder + pc.setNestedPlaceholder(true); // add properties component to camel context context.setPropertiesComponent(pc); diff --git a/components/camel-jasypt/src/test/resources/org/apache/camel/component/jasypt/SpringJasyptBridgePropertiesAutowireTest.xml b/components/camel-jasypt/src/test/resources/org/apache/camel/component/jasypt/SpringJasyptBridgePropertiesAutowireTest.xml index 0306b15dd24..a332f39fcdb 100644 --- a/components/camel-jasypt/src/test/resources/org/apache/camel/component/jasypt/SpringJasyptBridgePropertiesAutowireTest.xml +++ b/components/camel-jasypt/src/test/resources/org/apache/camel/component/jasypt/SpringJasyptBridgePropertiesAutowireTest.xml @@ -36,6 +36,12 @@ <property name="password" value="secret" /> </bean> + <!-- define the camel properties component --> + <bean id="properties" class="org.apache.camel.component.properties.PropertiesComponent"> + <!-- enable nested placeholder --> + <property name="nestedPlaceholder" value="true"/> + </bean> + <!-- bridge to spring property placeholder --> <bean id="bridgePropertyPlaceholder" class="org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer"> diff --git a/components/camel-jasypt/src/test/resources/org/apache/camel/component/jasypt/SpringJasyptBridgePropertiesTest.xml b/components/camel-jasypt/src/test/resources/org/apache/camel/component/jasypt/SpringJasyptBridgePropertiesTest.xml index bbfd54705af..cc95f355fac 100644 --- a/components/camel-jasypt/src/test/resources/org/apache/camel/component/jasypt/SpringJasyptBridgePropertiesTest.xml +++ b/components/camel-jasypt/src/test/resources/org/apache/camel/component/jasypt/SpringJasyptBridgePropertiesTest.xml @@ -29,6 +29,12 @@ <property name="password" value="secret"/> </bean> + <!-- define the camel properties component --> + <bean id="properties" class="org.apache.camel.component.properties.PropertiesComponent"> + <!-- enable nested placeholder --> + <property name="nestedPlaceholder" value="true"/> + </bean> + <!-- bridge to spring property placeholder --> <bean id="bridgePropertyPlaceholder" class="org.apache.camel.spring.spi.BridgePropertyPlaceholderConfigurer"> <property name="location" value="classpath:org/apache/camel/component/jasypt/myproperties.properties"/> diff --git a/components/camel-jasypt/src/test/resources/org/apache/camel/component/jasypt/SpringJasyptProperties2Test.xml b/components/camel-jasypt/src/test/resources/org/apache/camel/component/jasypt/SpringJasyptProperties2Test.xml index 5496c994429..c9bd62ca33a 100644 --- a/components/camel-jasypt/src/test/resources/org/apache/camel/component/jasypt/SpringJasyptProperties2Test.xml +++ b/components/camel-jasypt/src/test/resources/org/apache/camel/component/jasypt/SpringJasyptProperties2Test.xml @@ -36,6 +36,7 @@ <!-- define the camel properties placeholder, and let it leverage jasypt --> <propertyPlaceholder id="properties" location="classpath:org/apache/camel/component/jasypt/myproperties.properties" + nestedPlaceholder="true" propertiesParserRef="jasypt"/> <route> <from uri="direct:start"/> diff --git a/components/camel-jasypt/src/test/resources/org/apache/camel/component/jasypt/SpringJasyptPropertiesTest.xml b/components/camel-jasypt/src/test/resources/org/apache/camel/component/jasypt/SpringJasyptPropertiesTest.xml index 74263f7f5ad..24a993d3eb0 100644 --- a/components/camel-jasypt/src/test/resources/org/apache/camel/component/jasypt/SpringJasyptPropertiesTest.xml +++ b/components/camel-jasypt/src/test/resources/org/apache/camel/component/jasypt/SpringJasyptPropertiesTest.xml @@ -36,6 +36,8 @@ <property name="location" value="classpath:org/apache/camel/component/jasypt/myproperties.properties"/> <!-- and let it leverage the jasypt parser --> <property name="propertiesParser" ref="jasypt"/> + <!-- end enable nested placeholder --> + <property name="nestedPlaceholder" value="true"/> </bean> <!-- END SNIPPET: e1 --> diff --git a/core/camel-core-xml/src/generated/resources/org/apache/camel/core/xml/propertyPlaceholder.json b/core/camel-core-xml/src/generated/resources/org/apache/camel/core/xml/propertyPlaceholder.json index 8d8df0b018d..37e42375ad0 100644 --- a/core/camel-core-xml/src/generated/resources/org/apache/camel/core/xml/propertyPlaceholder.json +++ b/core/camel-core-xml/src/generated/resources/org/apache/camel/core/xml/propertyPlaceholder.json @@ -15,6 +15,7 @@ "location": { "kind": "attribute", "displayName": "Location", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "A list of locations to load properties. You can use comma to separate multiple locations. This option will override any default locations and only use the locations from this option." }, "encoding": { "kind": "attribute", "displayName": "Encoding", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Encoding to use when loading properties file from the file system or classpath. If no encoding has been set, then the properties files is loaded using ISO-8859-1 encoding (latin-1) as documented by java.util.Properties#load(java.io.InputStream)" }, "ignoreMissingLocation": { "kind": "attribute", "displayName": "Ignore Missing Location", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether to silently ignore if a location cannot be located, such as a properties file not found." }, + "nestedPlaceholder": { "kind": "attribute", "displayName": "Nested Placeholder", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether to support nested property placeholders. A nested placeholder, means that a placeholder, has also a placeholder, that should be resolved (recursively)." }, "propertiesParserRef": { "kind": "attribute", "displayName": "Properties Parser Ref", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Reference to a custom PropertiesParser to be used" }, "defaultFallbackEnabled": { "kind": "attribute", "displayName": "Default Fallback Enabled", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "If false, the component does not attempt to find a default for the key by looking after the colon separator." }, "propertiesFunction": { "kind": "element", "displayName": "Properties Function", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.core.xml.CamelPropertyPlaceholderFunctionDefinition>", "deprecated": false, "autowired": false, "secret": false, "description": "List of custom properties function to use." }, diff --git a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java index e6fe2111520..4d4a8e0797a 100644 --- a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java +++ b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java @@ -889,6 +889,9 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex if (def.isIgnoreMissingLocation() != null) { pc.setIgnoreMissingLocation(def.isIgnoreMissingLocation()); } + if (def.isNestedPlaceholder() != null) { + pc.setNestedPlaceholder(def.isNestedPlaceholder()); + } // if using a custom parser if (org.apache.camel.util.ObjectHelper.isNotEmpty(def.getPropertiesParserRef())) { diff --git a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelPropertyPlaceholderDefinition.java b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelPropertyPlaceholderDefinition.java index 402c56d7254..b191e2f659d 100644 --- a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelPropertyPlaceholderDefinition.java +++ b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelPropertyPlaceholderDefinition.java @@ -43,6 +43,9 @@ public class CamelPropertyPlaceholderDefinition extends IdentifiedType { @Metadata(defaultValue = "false") private Boolean ignoreMissingLocation; @XmlAttribute + @Metadata(defaultValue = "true") + private Boolean nestedPlaceholder; + @XmlAttribute private String propertiesParserRef; @XmlAttribute @Metadata(defaultValue = "true") @@ -111,6 +114,18 @@ public class CamelPropertyPlaceholderDefinition extends IdentifiedType { this.ignoreMissingLocation = ignoreMissingLocation; } + public Boolean isNestedPlaceholder() { + return nestedPlaceholder; + } + + /** + * Whether to support nested property placeholders. A nested placeholder, means that a placeholder, has also a + * placeholder, that should be resolved (recursively). + */ + public void setNestedPlaceholder(Boolean nestedPlaceholder) { + this.nestedPlaceholder = nestedPlaceholder; + } + public List<CamelPropertyPlaceholderFunctionDefinition> getFunctions() { return functions; }