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
The following commit(s) were added to refs/heads/main by this push: new d3f5c387119 Ctr mandatory (#11212) d3f5c387119 is described below commit d3f5c387119e16967a4997a2070af51862e1149f Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Mon Aug 28 13:12:29 2023 +0200 Ctr mandatory (#11212) CAMEL-19792: camel-core - PropertyBinding - Constructor args for beans should be mandatory lookup --- .../camel/support/PropertyBindingSupportTest.java | 25 ++++++++++++++++++++++ .../camel/support/PropertyBindingSupport.java | 10 +++++---- .../dsl/yaml/deserializers/BeansDeserializer.java | 1 - 3 files changed, 31 insertions(+), 5 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 1c7293db519..5c21ba511f4 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 @@ -22,6 +22,7 @@ import java.util.Properties; import org.apache.camel.CamelContext; import org.apache.camel.ContextTestSupport; +import org.apache.camel.NoSuchBeanException; import org.apache.camel.PropertyBindingException; import org.apache.camel.spi.Injector; import org.apache.camel.spi.PropertiesComponent; @@ -466,6 +467,30 @@ public class PropertyBindingSupportTest extends ContextTestSupport { assertFalse(foo.getAnimal().isDangerous()); } + @Test + public void testNestedClassConstructorParameterMandatoryBean() throws Exception { + Foo foo = new Foo(); + + PropertyBindingSupport.build().bind(context, foo, "name", "James"); + try { + PropertyBindingSupport.build().bind(context, foo, "animal", + "#class:org.apache.camel.support.Animal('#bean:myName', false)"); + fail("Should have thrown exception"); + } catch (PropertyBindingException e) { + NoSuchBeanException nsb = assertIsInstanceOf(NoSuchBeanException.class, e.getCause()); + assertEquals("myName", nsb.getName()); + } + + // add bean and try again + context.getRegistry().bind("myName", "Acme"); + PropertyBindingSupport.build().bind(context, foo, "animal", + "#class:org.apache.camel.support.Animal('#bean:myName', false)"); + + assertEquals("James", foo.getName()); + assertEquals("Acme", foo.getAnimal().getName()); + assertFalse(foo.getAnimal().isDangerous()); + } + @Test public void testNestedClassFactoryParameterOneParameter() throws Exception { Foo foo = new Foo(); 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 67d0a8179f4..3f2617fd6c2 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 @@ -1294,13 +1294,15 @@ public final class PropertyBindingSupport { } } } - if (val == null) { - val = camelContext.getTypeConverter().convertTo(paramType, param); - } // unquote text if (val instanceof String) { val = StringHelper.removeLeadingAndEndingQuotes((String) val); } + if (val != null) { + val = camelContext.getTypeConverter().tryConvertTo(paramType, val); + } else { + val = camelContext.getTypeConverter().convertTo(paramType, param); + } arr[i] = val; } return found.newInstance(arr); @@ -1603,7 +1605,7 @@ public final class PropertyBindingSupport { } } else if (strval.startsWith("#bean:")) { String key = strval.substring(6); - answer = camelContext.getRegistry().lookupByName(key); + answer = CamelContextHelper.mandatoryLookup(camelContext, key); } else if (strval.startsWith("#valueAs(")) { String text = strval.substring(8); String typeName = StringHelper.between(text, "(", ")"); diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/BeansDeserializer.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/BeansDeserializer.java index 63f4e81fb37..13c0e91a76a 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/BeansDeserializer.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/BeansDeserializer.java @@ -48,7 +48,6 @@ public class BeansDeserializer extends YamlDeserializerSupport implements Constr public Object construct(Node node) { final BeansCustomizer answer = new BeansCustomizer(); final SequenceNode sn = asSequenceNode(node); - final List<CamelContextCustomizer> customizers = new ArrayList<>(); final YamlDeserializationContext dc = getDeserializationContext(node); for (Node item : sn.getValue()) {