user3382677
user3382677

Reputation: 49

Camel CXF JMS Connection issue

I am trying to connect Weblogic JMS Topic through Camel CXF Consumer Client. But, it is giving the following error.

This issue might be because of jars incompatibility.

But, I am not sure which jar version of spring-jms is causing this issue?

I am using

camel version: 2.11.3
spring-jms-3.0.4.RELEASE.jar

org.springframework.jms.UncategorizedJmsException: Uncategorized exception occured during JMS processing; nested exception is weblogic.jms.common.JMSException: weblogic.messaging.dispatcher.DispatcherException: java.rmi.UnmarshalException: Problem deserializing error response; nested exception is: 
      java.io.InvalidClassException: javax.jms.JMSException; local class incompatible: stream classdesc serialVersionUID = 8951994251593378324, local class serialVersionUID = 2368476267211489441
      at org.springframework.jms.support.JmsUtils.convertJmsAccessException(JmsUtils.java:316)
      at org.springframework.jms.support.JmsAccessor.convertJmsAccessException(JmsAccessor.java:168)
      at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:469)
      at org.springframework.jms.core.JmsTemplate.receiveSelected(JmsTemplate.java:703)
      at org.springframework.jms.core.JmsTemplate.receive(JmsTemplate.java:681)
      at org.springframework.jms.core.JmsTemplate.receive(JmsTemplate.java:672)
      at org.apache.camel.component.jms.JmsPollingConsumer.receive(JmsPollingConsumer.java:60)
      at org.apache.camel.component.jms.JmsPollingConsumer.receive(JmsPollingConsumer.java:50)
      at org.apache.camel.impl.ConsumerCache.receive(ConsumerCache.java:105)
      at org.apache.camel.impl.DefaultConsumerTemplate.receive(DefaultConsumerTemplate.java:82)
      at examples.TestSimpleBuilder2.main(TestSimpleBuilder2.java:65)
Caused by: weblogic.jms.common.JMSException: weblogic.messaging.dispatcher.DispatcherException: java.rmi.UnmarshalException: Problem deserializing error response; nested exception is: 
      java.io.InvalidClassException: javax.jms.JMSException; local class incompatible: stream classdesc serialVersionUID = 8951994251593378324, local class serialVersionUID = 2368476267211489441
      at weblogic.jms.dispatcher.DispatcherAdapter.convertToJMSExceptionAndThrow(DispatcherAdapter.java:116)
      at weblogic.jms.dispatcher.DispatcherAdapter.dispatchSyncNoTran(DispatcherAdapter.java:61)
      at weblogic.jms.client.JMSSession.createDestination(JMSSession.java:3192)
      at weblogic.jms.client.JMSSession.createTopic(JMSSession.java:2427)
      at weblogic.jms.client.WLSessionImpl.createTopic(WLSessionImpl.java:1123)
      at org.springframework.jms.support.destination.DynamicDestinationResolver.resolveTopic(DynamicDestinationResolver.java:82)
      at org.springframework.jms.support.destination.DynamicDestinationResolver.resolveDestinationName(DynamicDestinationResolver.java:63)
      at org.springframework.jms.support.destination.JmsDestinationAccessor.resolveDestinationName(JmsDestinationAccessor.java:100)
      at org.springframework.jms.core.JmsTemplate.access$2(JmsTemplate.java:1)
      at org.springframework.jms.core.JmsTemplate$10.doInJms(JmsTemplate.java:705)
      at org.springframework.jms.core.JmsTemplate$10.doInJms(JmsTemplate.java:1)
      at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:466)
      ... 8 more
Caused by: weblogic.messaging.dispatcher.DispatcherException: java.rmi.UnmarshalException: Problem deserializing error response; nested exception is: 
      java.io.InvalidClassException: javax.jms.JMSException; local class incompatible: stream classdesc serialVersionUID = 8951994251593378324, local class serialVersionUID = 2368476267211489441
      at weblogic.messaging.dispatcher.DispatcherWrapperState.dispatchSyncTran(DispatcherWrapperState.java:345)
      at weblogic.messaging.dispatcher.DispatcherWrapperState.dispatchSyncNoTran(DispatcherWrapperState.java:381)
      at weblogic.jms.dispatcher.DispatcherAdapter.dispatchSyncNoTran(DispatcherAdapter.java:59)
      ... 18 more
Caused by: java.rmi.UnmarshalException: Problem deserializing error response; nested exception is: 
      java.io.InvalidClassException: javax.jms.JMSException; local class incompatible: stream classdesc serialVersionUID = 8951994251593378324, local class serialVersionUID = 2368476267211489441
      at weblogic.rjvm.ResponseImpl.getThrowable(ResponseImpl.java:195)
      at weblogic.messaging.dispatcher.DispatcherProxy.unmarshalResponse(DispatcherProxy.java:263)
      at weblogic.messaging.dispatcher.DispatcherProxy.dispatchSyncTranFuture(DispatcherProxy.java:134)
      at weblogic.messaging.dispatcher.DispatcherWrapperState.dispatchSyncTran(DispatcherWrapperState.java:334)
      ... 20 more
Caused by: java.io.InvalidClassException: javax.jms.JMSException; local class incompatible: stream classdesc serialVersionUID = 8951994251593378324, local class serialVersionUID = 2368476267211489441
      at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:604)
      at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1601)
      at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1514)
      at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1601)
      at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1514)
      at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1750)
      at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
      at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1970)
      at java.io.ObjectInputStream.defaultReadObject(ObjectInputStream.java:498)
      at java.lang.Throwable.readObject(Throwable.java:913)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:601)
      at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1004)
      at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1872)
      at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1777)
      at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
      at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
      at weblogic.utils.io.ChunkedObjectInputStream.readObject(ChunkedObjectInputStream.java:208)
      at weblogic.rjvm.MsgAbbrevInputStream.readObject(MsgAbbrevInputStream.java:599)
      at weblogic.rjvm.ResponseImpl.getThrowable(ResponseImpl.java:193)
      ... 23 more

Upvotes: 2

Views: 1017

Answers (1)

Richard Miskin
Richard Miskin

Reputation: 1260

It looks like the sender and receiver have different versions of the message classes.

java.io.InvalidClassException: javax.jms.JMSException; local class incompatible: stream classdesc serialVersionUID = 8951994251593378324, local class serialVersionUID = 2368476267211489441

Could you have regenerated the serialVersionUID and recompiled some of the code on either the producer or consumer?

One option to avoid this sort of problem is to serialise your data to XML or JSON rather than relying on Java's builtin serialisation support.

Upvotes: 3

Related Questions