This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch camel-3.14.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 69886f48ab66a0ff8721e6427b528bea82558d92
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed Jan 12 16:19:39 2022 +0100

    CAMEL-17479: configuring beans with {{?foo}} supported.
---
 .../OptionalPropertyPlaceholderBeanTest.java          |  5 -----
 .../apache/camel/support/PropertyBindingSupport.java  | 19 ++++++++++++++++++-
 2 files changed, 18 insertions(+), 6 deletions(-)

diff --git 
a/core/camel-core/src/test/java/org/apache/camel/component/properties/OptionalPropertyPlaceholderBeanTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/component/properties/OptionalPropertyPlaceholderBeanTest.java
index f388097..c281670 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/component/properties/OptionalPropertyPlaceholderBeanTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/component/properties/OptionalPropertyPlaceholderBeanTest.java
@@ -20,7 +20,6 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.component.pojo.SayService;
 import org.apache.camel.support.PropertyBindingSupport;
-import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -38,20 +37,17 @@ public class OptionalPropertyPlaceholderBeanTest extends 
ContextTestSupport {
         assertEquals("Hello", say.getMessage());
 
         PropertyBindingSupport.build().withTarget(say).withProperty("message", 
"{{?cool.name}}")
-                .withMandatory(false)
                 .withCamelContext(context)
                 .bind();
         assertEquals("Camel", say.getMessage());
     }
 
     @Test
-    @Disabled("TODO: https://issues.apache.org/jira/browse/CAMEL-17479";)
     public void testQueryOptionalNotPresent() throws Exception {
         SayService say = new SayService();
         assertEquals("Hello", say.getMessage());
 
         PropertyBindingSupport.build().withTarget(say).withProperty("message", 
"{{?unknown}}")
-                .withMandatory(false)
                 .withCamelContext(context)
                 .bind();
         assertEquals("Hello", say.getMessage());
@@ -63,7 +59,6 @@ public class OptionalPropertyPlaceholderBeanTest extends 
ContextTestSupport {
         assertEquals("Hello", say.getMessage());
 
         PropertyBindingSupport.build().withTarget(say).withProperty("message", 
"{{?unknown:Bye}}")
-                .withMandatory(false)
                 .withCamelContext(context)
                 .bind();
         assertEquals("Bye", say.getMessage());
diff --git 
a/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
 
b/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
index ee379b9..789b13a 100644
--- 
a/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
+++ 
b/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
@@ -38,6 +38,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.PropertyBindingException;
 import org.apache.camel.spi.BeanIntrospection;
+import org.apache.camel.spi.PropertiesComponent;
 import org.apache.camel.spi.PropertyConfigurer;
 import org.apache.camel.spi.PropertyConfigurerGetter;
 import org.apache.camel.util.StringHelper;
@@ -84,6 +85,17 @@ import static 
org.apache.camel.util.StringHelper.startsWithIgnoreCase;
  * </pre>
  * <p>
  * Where foo is mandatory, and bar is optional.
+ *
+ * <p>
+ * Values can be marked as optional property placeholder if the values name 
starts with a question mark, such as:
+ *
+ * <pre>
+ * username={{?clientUserName}}
+ * </pre>
+ * <p>
+ * Where the username property will only be set if the property placeholder 
<tt>clientUserName</tt> exists, otherwise
+ * the username is not affected.
+ * </p>
  */
 public final class PropertyBindingSupport {
 
@@ -420,7 +432,12 @@ public final class PropertyBindingSupport {
             key = camelContext.resolvePropertyPlaceholders(key);
             if (text instanceof String) {
                 // resolve property placeholders
-                text = 
camelContext.resolvePropertyPlaceholders(text.toString());
+                String s = text.toString();
+                text = camelContext.resolvePropertyPlaceholders(s);
+                if (text == null && 
s.startsWith(PropertiesComponent.PREFIX_TOKEN + "?")) {
+                    // it was an optional value, so we should not try to set 
the property but regard it as a "hit"
+                    return true;
+                }
             }
         }
 

Reply via email to