You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/10/12 05:42:27 UTC
[camel] 01/02: CAMEL-18600: properties component - Allow to turn off nested placeholders
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 <cl...@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;
}