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

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

commit 6a878fa9533be17089bcaaf0261919c517c19a00
Author: Claus Ibsen <[email protected]>
AuthorDate: Thu May 13 20:46:13 2021 +0200

    CAMEL-16607: Allow to use #type and #class for local beans. Fixed when 
using script as local bean.
---
 .../org/apache/camel/support/SupplierRegistry.java   | 20 ++++++++++++++++++--
 .../apache/camel/dsl/yaml/RouteTemplateTest.groovy   |  2 +-
 2 files changed, 19 insertions(+), 3 deletions(-)

diff --git 
a/core/camel-support/src/main/java/org/apache/camel/support/SupplierRegistry.java
 
b/core/camel-support/src/main/java/org/apache/camel/support/SupplierRegistry.java
index a4683d2..fc5e3c2 100644
--- 
a/core/camel-support/src/main/java/org/apache/camel/support/SupplierRegistry.java
+++ 
b/core/camel-support/src/main/java/org/apache/camel/support/SupplierRegistry.java
@@ -48,7 +48,7 @@ public class SupplierRegistry extends SimpleRegistry {
             answer = ((Supplier<?>) answer).get();
         }
         if (answer == null) {
-            // look for first entry that is the type
+            // no direct type match then check if assignable
             for (Map.Entry<Class<?>, Object> entry : map.entrySet()) {
                 if (type.isAssignableFrom(entry.getKey())) {
                     Object value = entry.getValue();
@@ -62,13 +62,29 @@ public class SupplierRegistry extends SimpleRegistry {
             }
         }
         if (answer == null) {
+            // okay fallback to check all entries that are unassigned type 
(java.lang.Object)
+            for (Map.Entry<Class<?>, Object> entry : map.entrySet()) {
+                if (Object.class == entry.getKey()) {
+                    Object value = entry.getValue();
+                    if (value instanceof Supplier) {
+                        // okay then eval the supplier to get the actual value
+                        value = ((Supplier<?>) value).get();
+                    }
+                    if (type.isInstance(value)) {
+                        answer = value;
+                        break;
+                    }
+                }
+            }
+        }
+        if (answer == null) {
             return null;
         }
         try {
             answer = unwrap(answer);
             return type.cast(answer);
         } catch (Throwable e) {
-            String msg = "Found bean: " + name + " in SimpleRegistry: " + this
+            String msg = "Found bean: " + name + " in SupplierRegistry: " + 
this
                          + " of type: " + answer.getClass().getName() + " 
expected type was: " + type;
             throw new NoSuchBeanException(name, msg, e);
         }
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RouteTemplateTest.groovy
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RouteTemplateTest.groovy
index 7c8ab22..b8a3293 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RouteTemplateTest.groovy
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/RouteTemplateTest.groovy
@@ -98,7 +98,7 @@ class RouteTemplateTest extends YamlTestSupport {
                     beans:
                       - name: "myProcessor"
                         type: "groovy"
-                        script: "return new ${MyUppercaseProcessor.class.name}"
+                        script: "new ${MyUppercaseProcessor.class.name}()"
                     from:
                       uri: "direct:{{directName}}"
                       steps:

Reply via email to