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

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

commit 5a1c93c72a8e171873d2bdf1364196fb7d390591
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Thu May 23 09:57:29 2019 +0200

    CAMEL-13557: Add property binding support to make it convenient to 
configure components and whatnot.
---
 .../camel/support/PropertyBindingSupportTest.java    | 20 +++++++++++++++++++-
 .../apache/camel/support/PropertyBindingSupport.java |  8 ++++++--
 2 files changed, 25 insertions(+), 3 deletions(-)

diff --git 
a/core/camel-core/src/test/java/org/apache/camel/support/PropertyBindingSupportTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/support/PropertyBindingSupportTest.java
index b3f32c7..bce0ad0 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/support/PropertyBindingSupportTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/support/PropertyBindingSupportTest.java
@@ -107,6 +107,24 @@ public class PropertyBindingSupportTest extends 
ContextTestSupport {
     }
 
     @Test
+    public void testNestedReferenceId() throws Exception {
+        Foo foo = new Foo();
+
+        PropertyBindingSupport.bindProperty(context, foo, "name", "James");
+        PropertyBindingSupport.bindProperty(context, foo, "bar.age", "33");
+        PropertyBindingSupport.bindProperty(context, foo, "bar.gold-customer", 
"true");
+        PropertyBindingSupport.bindProperty(context, foo, "bar.rider", "true");
+        PropertyBindingSupport.bindProperty(context, foo, "bar.work", 
"#id:myWork");
+
+        assertEquals("James", foo.getName());
+        assertEquals(33, foo.getBar().getAge());
+        assertTrue(foo.getBar().isRider());
+        assertTrue(foo.getBar().isGoldCustomer());
+        assertEquals(456, foo.getBar().getWork().getId());
+        assertEquals("Acme", foo.getBar().getWork().getName());
+    }
+
+    @Test
     public void testNestedType() throws Exception {
         Foo foo = new Foo();
 
@@ -132,7 +150,7 @@ public class PropertyBindingSupportTest extends 
ContextTestSupport {
         PropertyBindingSupport.bindProperty(context, foo, "bar.age", "33");
         PropertyBindingSupport.bindProperty(context, foo, "bar.{{committer}}", 
"true");
         PropertyBindingSupport.bindProperty(context, foo, "bar.gold-customer", 
"true");
-        PropertyBindingSupport.bindProperty(context, foo, "bar.work", 
"class:org.apache.camel.support.Company");
+        PropertyBindingSupport.bindProperty(context, foo, "bar.work", 
"#class:org.apache.camel.support.Company");
 
         assertEquals("James", foo.getName());
         assertEquals(33, foo.getBar().getAge());
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 5d06df4..6765233 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
@@ -32,7 +32,7 @@ import static 
org.apache.camel.support.IntrospectionSupport.getOrElseProperty;
  * <ul>
  *     <li>property placeholders - Keys and values using Camels property 
placeholder will be resolved</li>
  *     <li>nested - Properties can be nested using the dot syntax (OGNL and 
builder pattern using with as prefix), eg foo.bar=123</li>
- *     <li>reference by id - Values can refer to other beans in the registry 
by prefixing with # syntax, eg #myBean</li>
+ *     <li>reference by id - Values can refer to other beans in the registry 
by prefixing with #id: or # syntax, eg #id:myBean or #myBean</li>
  *     <li>reference by type - Values can refer to singleton beans by their 
type in the registry by prefixing with #type: syntax, eg 
#type:com.foo.MyClassType</li>
  *     <li>new class - Values can refer to creating new beans by their class 
name syntax, eg class:com.foo.MyClassType</li>
  * </ul>
@@ -150,7 +150,7 @@ public final class PropertyBindingSupport {
         }
 
         if (value instanceof String) {
-            if (value.toString().startsWith("class:")) {
+            if (value.toString().startsWith("#class:")) {
                 // its a new class to be created
                 String className = value.toString().substring(6);
                 Class<?> type = 
context.getClassResolver().resolveMandatoryClass(className);
@@ -167,6 +167,10 @@ public final class PropertyBindingSupport {
                         value = types.iterator().next();
                     }
                 }
+            } else if (value.toString().startsWith("#id:")) {
+                // okay its a reference so swap to lookup this which is 
already supported in IntrospectionSupport
+                refName = ((String) value).substring(4);
+                value = null;
             } else if (EndpointHelper.isReferenceParameter(value.toString())) {
                 // okay its a reference so swap to lookup this which is 
already supported in IntrospectionSupport
                 refName = value.toString();

Reply via email to