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 0ff84a244d9 CAMEL-19234: Lookup beans by name+type first, and fallback
to name-and-convert, when resolving endpoint URI beans. (#9811)
0ff84a244d9 is described below
commit 0ff84a244d91b58cc007ac969ff88366e1c09b6e
Author: Claus Ibsen <[email protected]>
AuthorDate: Wed Apr 5 06:58:54 2023 +0200
CAMEL-19234: Lookup beans by name+type first, and fallback to
name-and-convert, when resolving endpoint URI beans. (#9811)
---
.../org/apache/camel/support/EndpointHelper.java | 44 ++++++++++++----------
1 file changed, 24 insertions(+), 20 deletions(-)
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 280022165aa..c37820caa3f 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
@@ -310,23 +310,17 @@ public final class EndpointHelper {
* @throws NoSuchBeanException if object was not found in registry and
<code>mandatory</code> is <code>true</code>.
*/
public static <T> T resolveReferenceParameter(CamelContext context, String
value, Class<T> type, boolean mandatory) {
+ Object answer = null;
if (value.startsWith("#class:")) {
- Object answer;
try {
answer = createBean(context, value, type);
} catch (Exception e) {
throw new NoSuchBeanException(value, e);
}
- if (mandatory && answer == null) {
- throw new NoSuchBeanException(value);
- }
- return type.cast(answer);
} else if (value.startsWith("#type:")) {
try {
- Object answer = null;
-
- String valueNoHash = value.substring(6);
- Class<?> clazz =
context.getClassResolver().resolveMandatoryClass(valueNoHash);
+ value = value.substring(6);
+ Class<?> clazz =
context.getClassResolver().resolveMandatoryClass(value);
Set<?> set = context.getRegistry().findByType(clazz);
if (set.size() == 1) {
answer = set.iterator().next();
@@ -334,25 +328,35 @@ public final class EndpointHelper {
throw new NoSuchBeanException(
value, "Found " + set.size() + " beans of type: "
+ clazz + ". Only 1 bean instance is supported.");
}
- if (mandatory && answer == null) {
- throw new NoSuchBeanException(value);
- }
- if (answer != null) {
- answer = context.getTypeConverter().convertTo(type,
answer);
- }
- return type.cast(answer);
} catch (ClassNotFoundException e) {
throw new NoSuchBeanException(value, e);
}
} else {
- String valueNoHash = value.replace("#bean:", "");
- valueNoHash = valueNoHash.replace("#", "");
+ value = value.replace("#bean:", "");
+ value = value.replace("#", "");
+ // lookup first with type
+ answer = CamelContextHelper.lookup(context, value, type);
+ if (answer == null) {
+ // fallback to lookup by name
+ answer = CamelContextHelper.lookup(context, value);
+ }
+ }
+
+ if (mandatory && answer == null) {
+ if (type != null) {
+ throw new NoSuchBeanException(value, type.getTypeName());
+ } else {
+ throw new NoSuchBeanException(value);
+ }
+ }
+ if (answer != null) {
if (mandatory) {
- return CamelContextHelper.mandatoryLookupAndConvert(context,
valueNoHash, type);
+ answer = CamelContextHelper.convertTo(context, type, answer);
} else {
- return CamelContextHelper.lookupAndConvert(context,
valueNoHash, type);
+ answer = CamelContextHelper.tryConvertTo(context, type,
answer);
}
}
+ return (T) answer;
}
private static <T> T createBean(CamelContext camelContext, String name,
Class<T> type) throws Exception {