[
https://issues.apache.org/jira/browse/CAMEL-10666?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15795313#comment-15795313
]
Davide Cavestro commented on CAMEL-10666:
-----------------------------------------
I've sent a pull request to restore the possibility to send serializable
headers within the exchange when using a JMS endpoint, simply setting to _true_
the new parameter _allowSerializedHeaders_ ( honored only when
_transferExchange_ is _true_).
Please note that the serialization of _complex_ headers in JMS endpoints was
available in 2.15 but removed in 2.16. Now it happens that FUSE 6.3.0 bundles a
2.17, so it would be great having a way to restore that feature in 2.17. That's
why the fix was made on a branch forked from 2.17.x.
> Serializable headers lost by JmsBinding
> ---------------------------------------
>
> Key: CAMEL-10666
> URL: https://issues.apache.org/jira/browse/CAMEL-10666
> Project: Camel
> Issue Type: Improvement
> Components: camel-core, camel-jms
> Affects Versions: 2.17.0
> Environment: Apache Camel 2.17.0
> Reporter: Barbara De Vido
> Assignee: Andrea Cosentino
> Priority: Minor
> Fix For: Future
>
>
> In Camle 2.15.1 I was able to set a custom object in the header of my
> exchange and as long as it was serializable and the container consuming the
> route had this JVM options set
> (-Dorg.apache.activemq.SERIALIZABLE_PACKAGES="*") and the queue had for both
> producer and consumer the option "transferExchange=true" everything was
> working fine.
> Now my company wanted to move to Camel 2.17.0.
> The same code do not work anymore. All serializable objects in header are
> removed.
> To make a simple example, there is not need to have a custom object, it can
> be a Calendar object.
> I decided to debug the code, and I noticed a big change in the
> org.apache.camel.impl.DefaultExchangeHolder class (camel-core).
> It is used by the
> org.apache.camel.component.jms.JmsBinding#createJmsMessage(org.apache.camel.Exchange,
> java.lang.Object, java.util.Map<java.lang.String,java.lang.Object>, Session,
> org.apache.camel.CamelContext). Which is in camel-jms
> JmsBinding methos invoke DefaultExchangeHolder.marshal(echange)
>
> which is this:
> public static DefaultExchangeHolder marshal(Exchange exchange) {
> return marshal(exchange, true, false); <---- THE FALSE PARAMETER AVOID THE
> MARSHAL OF COMPLEX TYPE
> }
>
> In Camel 2.1.5.1 the class is quite different and there is not any flag
> avoiding the serializable headers, or at list I did not see any.
>
> This is a big change and it is not documented since if I look at the Camel
> page, it clearly states that if transferExchange is true than
> "You can transfer the exchange over the wire instead of just the body and
> headers. The following fields are transferred: In body, Out body, Fault body,
> In headers, Out headers, Fault headers, exchange properties, exchange
> exception. This requires that the objects are serializable. Camel will
> exclude any non-serializable objects and log it at WARN level.
> You must enable this option on both the producer and the consumer side, so
> Camel will know that the payload is an Exchange and not a regular payload."
>
> There is any workaround in order to make this whole thing work as is should
> work?
> I know that there was a similar issue for levelDb
> https://issues.apache.org/jira/browse/CAMEL-9584
> Thank you
> Barbara
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)