This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
commit e076b7a412322e8708389d653ea8b4cf3725426a Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Sat Aug 22 22:15:27 2020 +0200 CAMEL-15394: PropertyBindingSupport: Old syntax for #ref values should be handled specially for reflection vs configurer for options that are String type based. --- .../camel/support/PropertyBindingSupport.java | 37 +++++++++++++++------- 1 file changed, 25 insertions(+), 12 deletions(-) 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 3deb614..41b6f76 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 @@ -872,14 +872,6 @@ public final class PropertyBindingSupport { // resolve property placeholders str = camelContext.resolvePropertyPlaceholders(str.toString()); } - // special for reference (we should not do this for options that are String type) - // this is only required for reflection (non configurer as configurer does this automatic in a more safe way) - if (configurer == null && reference && isReferenceParameter(str)) { - Object bean = CamelContextHelper.lookup(camelContext, str.toString().substring(1)); - if (bean != null) { - str = bean; - } - } value = str; } catch (Exception e) { // report the exception using the long key and parent target @@ -897,7 +889,7 @@ public final class PropertyBindingSupport { } if (!bound) { // fallback to reflection based - bound = setPropertyCollectionViaReflection(camelContext, target, key, value, ignoreCase); + bound = setPropertyCollectionViaReflection(camelContext, target, key, value, ignoreCase, reference); } } else { // regular key @@ -930,7 +922,7 @@ public final class PropertyBindingSupport { private static boolean setPropertyCollectionViaReflection( CamelContext context, Object target, String name, Object value, - boolean ignoreCase) + boolean ignoreCase, boolean reference) throws Exception { BeanIntrospection bi = context.adapt(ExtendedCamelContext.class).getBeanIntrospection(); @@ -963,6 +955,19 @@ public final class PropertyBindingSupport { "Cannot set property: " + name + " as a Map because target bean has no setter method for the Map"); } } + + // special for reference (we should not do this for options that are String type) + // this is only required for reflection (as configurer does this automatic in a more safe way) + if (value instanceof String) { + String str = value.toString(); + if (reference && isReferenceParameter(str)) { + Object bean = CamelContextHelper.lookup(context, str.toString().substring(1)); + if (bean != null) { + value = bean; + } + } + } + if (obj instanceof Map) { Map map = (Map) obj; map.put(lookupKey, value); @@ -1231,12 +1236,20 @@ public final class PropertyBindingSupport { String refName = null; if (reference && value instanceof String) { - if (value.toString().startsWith("#bean:")) { + String str = value.toString(); + if (str.startsWith("#bean:")) { // okay its a reference so swap to lookup this which is already supported in IntrospectionSupport refName = "#" + ((String) value).substring(6); value = null; - } else if (value.toString().equals("#autowired")) { + } else if (str.equals("#autowired")) { value = resolveAutowired(context, target, name, value, ignoreCase, fluentBuilder, allowPrivateSetter, null); + } else if (isReferenceParameter(str)) { + // special for reference (we should not do this for options that are String type) + // this is only required for reflection (as configurer does this automatic in a more safe way) + Object bean = CamelContextHelper.lookup(context, str.toString().substring(1)); + if (bean != null) { + value = bean; + } } }