Hi guys,
We seeing some strange behavior. Camel 3.21.2.
Before:
--------------
We have bean:
public class IMapHelperImpl {
public void addPropToIMap(String trackID, String key, Object value,
Exchange exchange) {
// some code
}
}
In blueprint.xml we configure the bean:
<bean id="IMapHelperImpl" class="com.youngtew.miniswitch.common.IMapHelperImpl">
And use it only passing 3 params. "Exchange" is a Camel-specific type, and dont
need to be passed.
<camel:bean ref="IMapHelper" method="addPropToIMap(${header.customTrackID},
'Message_Protocol', 'DMS')" />
And this has always worked fine.
After:
----------------
Now we moved the bean to bundle A and created a interface and register it as a
service in bundle A:
public interface IMapHelper {
void addPropToIMap(String trackID, String key, Object value, Exchange
exchange);
}
public class IMapHelperImpl implements IMapHelper{
@Override
public void addPropToIMap(String trackID, String key, Object value,
Exchange exchange) {
// some code
}
}
Declare as service in blueprint:
<bean id="IMapHelperImpl"
class="com.youngtew.miniswitch.common.impl.IMapHelperImpl">
<property name="txMapProp" ref="instance"/>
</bean>
<service interface="com.youngtew.miniswitch.common.IMapHelper"
ref="IMapHelperImpl"/>
In bundle B we access and use the service in a camel route like before:
<reference id="IMapHelper"
interface="com.youngtew.miniswitch.common.IMapHelper" />
<camel:bean ref="IMapHelper"
method="addPropToIMap(${header.customTrackID}, 'Message_Protocol', 'DMS')" />
But we keep getting:
Caused by: org.apache.camel.component.bean.AmbiguousMethodCallException:
Ambiguous method invocations possible: [
public void
Proxyafd06aa7_d318_48fc_83c8_c1fca7b2423c.addPropToIMap(java.lang.String,java.lang.String,java.lang.Object,org.apache.camel.Exchange),
public abstract void
com.youngtew.miniswitch.common.IMapHelper.addPropToIMap(java.lang.String,java.lang.String,java.lang.Object,org.apache.camel.Exchange)]
on the exchange: Exchange[FB35D15A8E52D13-0000000000000000]
Although there is just one method with that name.
We can solve it with a work around by passing all 4 params by adding
${exchange}, and it works:
<camel:bean ref="IMapHelper" method="addPropToIMap(${header.customTrackID},
'Message_Protocol', 'DMS', ${exchange})" />
So I was womdering what am I missing with regards to the bean binding when
using it as a service compared to a local bean declaration.
Thanks for any suggestions.
Gabriel