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()) {

Reply via email to