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:
