camel-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Christopher Harris (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (CAMEL-10745) POJO @Produce @Consume does not work with multiple arguments anymore.
Date Wed, 25 Jan 2017 12:42:26 GMT

     [ https://issues.apache.org/jira/browse/CAMEL-10745?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Christopher Harris updated CAMEL-10745:
---------------------------------------
    Environment: Ubuntu 16.04, OpenJDK 1.7, Spring 4.2.6.RELEASE  (was: Ubuntu 16.04, OpenJDK
1.7)

> 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: Bug
>          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
>
> 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/52a739feb9da8acd29067304c7c8356bbc5ef4dd/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/52a739feb9da8acd29067304c7c8356bbc5ef4dd/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)

Mime
View raw message