[
https://issues.apache.org/jira/browse/CAMEL-10745?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Claus Ibsen updated CAMEL-10745:
--------------------------------
Issue Type: Improvement (was: Bug)
> POJO @Produce @Consume does not work with multiple arguments anymore.
> ---------------------------------------------------------------------
>
> Key: CAMEL-10745
> URL: https://issues.apache.org/jira/browse/CAMEL-10745
> Project: Camel
> Issue Type: Improvement
> Components: camel-core
> Affects Versions: 2.16.0, 2.17.0, 2.18.0
> Environment: Ubuntu 16.04, OpenJDK 1.7, Spring 4.2.6.RELEASE
> Reporter: Christopher Harris
> Fix For: 2.19.0
>
>
> Upgraded from 2.14 to 2.17.3.
> Using Camel-Spring with annotation @Produce on an interface with a single
> method that has multiple arguments and @Consume on the implementation to
> create a remote method invocation over activemq.
> According to the documentation that since 2.16 the default behave of this
> usage has changed to use the new binding procedure.
> When you use the word "default" in the documentation, it implies there is a
> choice to use a non-default way.
> However my first problem is that there seems to be no way to override the
> default behaviour (binding to false), when using spring POJO beans.
> Based on the source code of [CamelPostProcessorHelper class method
> getInjectionValue|https://github.com/apache/camel/blob/master/camel-core/src/main/java/org/apache/camel/impl/CamelPostProcessorHelper.java#L224].
> This method checks for an interface type and creates a proxy by using the
> ProxyHelper, that forces the binding to always be set to true.
> This leads to my next problem, now with the binding turned on, it does not
> work for an interface method with multiple arguments on the producer side any
> more. (version > 2.16)
> While the [bean integration
> document|http://camel.apache.org/bean-binding.html] suggests:
> {quote}
> you can explicitly specify the method name in the DSL or when using POJO
> Consuming or POJO Producing.
> {quote}
> In the source code of [AbstractCamelInvocationHandler invokeProxy
> method|https://github.com/apache/camel/blob/master/camel-core/src/main/java/org/apache/camel/component/bean/AbstractCamelInvocationHandler.java#L117]
> when the binding is turned on, which is always, it tries to get all
> annotations for each argument. But because there isn't any, it assumes there
> is only one argument and sets the body of the in message to this value,
> ignoring the rest.
> This behaviour in my opinion is contradictory to the document, since no where
> in the documentation is it suggested you can only have one or no arguments in
> methods for POJO Producing. This wouldn't be a problem if there is a way to
> turn the default binding off.
> This wasn't a problem before 2.16.
> Third issue, since you can only have one @Body annotation, tried to use the
> @Header annotation for each argument. This encountered an issue with the
> conversion of the java.util.Date Object as one of the arguments. It defaults
> to use toString and fromString to marshall and unmarshall the object. I have
> not tried to create custom type converters, I think any Java standard object
> should work out of box.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)