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 dbd439937b0148edfa536bfe5c553d6fc13d398f Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Thu May 23 20:43:30 2019 +0200 CAMEL-13557: Add property binding support to make it convenient to configure components and whatnot. --- .../DefaultComponentReferencePropertiesTest.java | 4 ++-- .../camel/support/PropertyBindingSupportTest.java | 4 ++-- .../org/apache/camel/support/EndpointHelper.java | 5 ++-- .../camel/support/PropertyBindingSupport.java | 27 ++++++++++++---------- 4 files changed, 21 insertions(+), 19 deletions(-) diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentReferencePropertiesTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentReferencePropertiesTest.java index 0ab463e..81fc01b 100644 --- a/core/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentReferencePropertiesTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/impl/DefaultComponentReferencePropertiesTest.java @@ -199,8 +199,8 @@ public class DefaultComponentReferencePropertiesTest extends ContextTestSupport MyComponent component = new MyComponent(context); try { component.createEndpoint("foo://?special=#dummy"); - fail("Should have throw a ResolveEndpointFailedException"); - } catch (ResolveEndpointFailedException e) { + fail("Should have throw a Exception"); + } catch (Exception e) { // ok } } 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 c372e39..327c919 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 @@ -96,7 +96,7 @@ public class PropertyBindingSupportTest extends ContextTestSupport { 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", "#myWork"); + PropertyBindingSupport.bindProperty(context, foo, "bar.work", "#bean:myWork"); assertEquals("James", foo.getName()); assertEquals(33, foo.getBar().getAge()); @@ -114,7 +114,7 @@ public class PropertyBindingSupportTest extends ContextTestSupport { 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"); + PropertyBindingSupport.bindProperty(context, foo, "bar.work", "#bean:myWork"); assertEquals("James", foo.getName()); assertEquals(33, foo.getBar().getAge()); diff --git a/core/camel-support/src/main/java/org/apache/camel/support/EndpointHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/EndpointHelper.java index adc82cd..0dd2adc 100644 --- a/core/camel-support/src/main/java/org/apache/camel/support/EndpointHelper.java +++ b/core/camel-support/src/main/java/org/apache/camel/support/EndpointHelper.java @@ -157,9 +157,8 @@ public final class EndpointHelper { * @throws Exception is thrown if setting property fails */ public static void setProperties(CamelContext context, Object bean, Map<String, Object> parameters) throws Exception { - // TODO: Use more advanced bindingDefaultComponentReferencePropertiesTes - PropertyBindingSupport.bindProperties(context, bean, parameters); - //IntrospectionSupport.setProperties(context.getTypeConverter(), bean, parameters); + // use the property binding which can do more advanced configuration + PropertyBindingSupport.bindProperties(context, bean, parameters); } /** 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 99f9638..d992565 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 @@ -34,7 +34,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 #id: or # syntax, eg #id:myBean or #myBean</li> + * <li>reference by bean id - Values can refer to other beans in the registry by prefixing with #nean: eg #bean: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>autowire by type - Values can refer to singleton beans by auto wiring by setting the value to #autowire</li> * <li>new class - Values can refer to creating new beans by their class name syntax, eg class:com.foo.MyClassType</li> @@ -43,6 +43,13 @@ import static org.apache.camel.support.IntrospectionSupport.getOrElseProperty; */ public final class PropertyBindingSupport { + // TODO: Add support for Map/List + // TODO: Add option to turn on|off new class + // TODO: Add option to turn this binding on|off on component/endpoint level + + /** + * To use a fluent builder style to configure this property binding support. + */ public static class Builder { private boolean nesting = true; @@ -93,8 +100,6 @@ public final class PropertyBindingSupport { } - // TODO: Add support for Map/List - private PropertyBindingSupport() { } @@ -325,9 +330,11 @@ public final class PropertyBindingSupport { newClass = newTarget.getClass(); } } - // okay we found a nested property, then lets change to use that - target = newTarget; - name = parts[parts.length - 1]; + if (newTarget != target) { + // okay we found a nested property, then lets change to use that + target = newTarget; + name = parts[parts.length - 1]; + } } } @@ -361,13 +368,9 @@ public final class PropertyBindingSupport { } } } - } 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())) { + } else if (value.toString().startsWith("#bean:")) { // okay its a reference so swap to lookup this which is already supported in IntrospectionSupport - refName = value.toString(); + refName = ((String) value).substring(6); value = null; } }