-
Bug
-
Resolution: Done
-
Major
-
2.7.1-fuse-00-27
-
None
-
None
Hi,
I receive a ClassCastException (see full stack trace below) when I use an OSGi blueprint with ActiveMQ when sending javax.jms.ObjectMessage with JAXB annotations over the JMS queues. If I use a spring configuration everything works ok.
I've attached two versions of the test case, one in spring and one in blueprint. They are based off our camel-blueprint and camel-osgi demos. Essentially a JAXB object is created and put onto an activemq queue. When the second route is activated it is unable to read from the queue resulting in the message below.
Possible Workaround
I noticed if I transfer the exception, I can avoid this error message.
<from uri="activemq:queue:testBlueprintEmployee?transferException=true"/>
If you need anything else, please let me know.
Susan
Stack Trace
11:06:34,937 | WARN | ueprintEmployee] | JmsMessageListenerContainer | 94 - org.springframework.jms - 3.0.5.RELEASE | Execution of JMS message listener failed, and no ErrorHandler has been set.
org.apache.camel.RuntimeCamelException: java.lang.ClassCastException: cannot assign instance of javax.xml.bind.JAXBElement to field org.apache.servicemix.examples.camel.Employee.userLabel of type javax.xml.bind.JAXBElement in instance of org.apache.servicemix.examples.camel.Employee
at org.apache.camel.util.ObjectHelper.wrapRuntimeCamelException(ObjectHelper.java:1139)[78:org.apache.camel.camel-core:2.7.1.fuse-00-27]
at org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:122)[93:org.apache.camel.camel-jms:2.7.1.fuse-00-27]
at org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:560)[94:org.springframework.jms:3.0.5.RELEASE]
at org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:498)[94:org.springframework.jms:3.0.5.RELEASE]
at org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:467)[94:org.springframework.jms:3.0.5.RELEASE]
at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:325)[94:org.springframework.jms:3.0.5.RELEASE]
at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:263)[94:org.springframework.jms:3.0.5.RELEASE]
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1058)[94:org.springframework.jms:3.0.5.RELEASE]
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1050)[94:org.springframework.jms:3.0.5.RELEASE]
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:947)[94:org.springframework.jms:3.0.5.RELEASE]
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)[:1.6.0_26]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)[:1.6.0_26]
at java.lang.Thread.run(Thread.java:680)[:1.6.0_26]
Caused by: java.lang.ClassCastException: cannot assign instance of javax.xml.bind.JAXBElement to field org.apache.servicemix.examples.camel.Employee.userLabel of type javax.xml.bind.JAXBElement in instance of org.apache.servicemix.examples.camel.Employee
at java.io.ObjectStreamClass$FieldReflector.setObjFieldValues(ObjectStreamClass.java:2039)[:1.6.0_26]
at java.io.ObjectStreamClass.setObjFieldValues(ObjectStreamClass.java:1212)[:1.6.0_26]
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1952)[:1.6.0_26]
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1870)[:1.6.0_26]
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1752)[:1.6.0_26]
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1328)[:1.6.0_26]
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)[:1.6.0_26]
at org.apache.activemq.command.ActiveMQObjectMessage.getObject(ActiveMQObjectMessage.java:184)[52:org.apache.activemq.activemq-core:5.5.0.fuse-00-27]
at org.apache.camel.component.jms.JmsBinding.extractBodyFromJms(JmsBinding.java:127)[93:org.apache.camel.camel-jms:2.7.1.fuse-00-27]
at org.apache.camel.component.jms.JmsMessage.createBody(JmsMessage.java:204)[93:org.apache.camel.camel-jms:2.7.1.fuse-00-27]
at org.apache.camel.impl.MessageSupport.getBody(MessageSupport.java:41)[78:org.apache.camel.camel-core:2.7.1.fuse-00-27]
at org.apache.camel.impl.DefaultUnitOfWork.<init>(DefaultUnitOfWork.java:82)[78:org.apache.camel.camel-core:2.7.1.fuse-00-27]
at org.apache.camel.processor.UnitOfWorkProcessor.createUnitOfWork(UnitOfWorkProcessor.java:147)[78:org.apache.camel.camel-core:2.7.1.fuse-00-27]
at org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:90)[78:org.apache.camel.camel-core:2.7.1.fuse-00-27]
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:80)[78:org.apache.camel.camel-core:2.7.1.fuse-00-27]
at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:98)[78:org.apache.camel.camel-core:2.7.1.fuse-00-27]
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:89)[78:org.apache.camel.camel-core:2.7.1.fuse-00-27]
at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:68)[78:org.apache.camel.camel-core:2.7.1.fuse-00-27]
at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:106)[78:org.apache.camel.camel-core:2.7.1.fuse-00-27]
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:85)[78:org.apache.camel.camel-core:2.7.1.fuse-00-27]
at org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:93)[93:org.apache.camel.camel-jms:2.7.1.fuse-00-27]