in core/camel-spring-boot/src/main/java/org/apache/camel/spring/boot/util/CamelPropertiesHelper.java [83:133]
public static boolean setCamelProperties(CamelContext context, Object target, Map<String, Object> properties, boolean failIfNotSet) {
ObjectHelper.notNull(context, "context");
ObjectHelper.notNull(target, "target");
ObjectHelper.notNull(properties, "properties");
boolean rc = false;
PropertyConfigurer configurer = null;
if (target instanceof Component) {
// the component needs to be initialized to have the configurer ready
ServiceHelper.initService(target);
configurer = ((Component) target).getComponentPropertyConfigurer();
}
Iterator<Map.Entry<String, Object>> it = properties.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, Object> entry = it.next();
String name = entry.getKey();
Object value = entry.getValue();
String stringValue = value != null ? value.toString() : null;
boolean hit = false;
try {
hit = PropertyBindingSupport.build()
.withConfigurer(configurer)
.withIgnoreCase(true)
.bind(context, target, name, value);
} catch (PropertyBindingException e) {
// no we could not and this would be thrown if we attempted to set a value on a property which we cannot do type conversion as
// then maybe the value refers to a spring bean in the registry so try this
if (stringValue != null) {
if (stringValue.startsWith("#")) {
stringValue = stringValue.substring(1);
}
// use #bean: to lookup
stringValue = "#bean:" + stringValue;
hit = PropertyBindingSupport.build().withIgnoreCase(true).bind(context, target, name, stringValue);
}
}
if (hit) {
// must remove as its a valid option and we could configure it
it.remove();
rc = true;
} else if (failIfNotSet) {
throw new IllegalArgumentException("Cannot configure option [" + name + "] with value [" + stringValue
+ "] as the bean class [" + ObjectHelper.classCanonicalName(target)
+ "] has no suitable setter method, or not possible to lookup a bean with the id [" + stringValue + "] in Spring Boot registry");
}
}
return rc;
}