IBM MQ - 消息反序列化期间的ClassNotFoundException

时间:2017-04-24 03:38:55

标签: deserialization ibm-mq classnotfoundexception weblogic12c

我在从MQ消费时反序列化消息时遇到问题。该应用程序部署在weblogic上,并通过weblogic外部服务器配置连接到MQ。消息的内容是一个Spring集成框架类(ChunkRequest),我确保所有相关的库都在接收方的weblogic类路径中。在接收方,我得到一个ClassNotFoundException。

为了更加确定,我已将相关库添加到weblogic库和应用程序中,没有太多运气。所需的类也会添加到<prefer-application-packages>中的weblogic-application.xml。任何指针都将非常感激。

感谢

堆栈跟踪

com.ibm.msg.client.jms.DetailedMessageFormatException: JMSCC0053: An exception occurred deserializing a message, excepti
on: 'java.lang.ClassNotFoundException: null class'.
It was not possible to deserialize the message because of the exception shown.
Examine the linked exception for details of the error.
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
        at com.ibm.msg.client.commonservices.j2se.NLSServices.createException(NLSServices.java:319)
        at com.ibm.msg.client.commonservices.nls.NLSServices.createException(NLSServices.java:226)
        at com.ibm.msg.client.jms.internal.JmsErrorUtils.createException(JmsErrorUtils.java:126)
        at com.ibm.msg.client.jms.internal.JmsObjectMessageImpl.getObject(JmsObjectMessageImpl.java:363)
        at com.ibm.jms.JMSObjectMessage.getObject(JMSObjectMessage.java:126)
        at org.jba.receiver.JMSReceiver.onMessage(JMSReceiver.java:43)
        at com.ibm.mq.jms.MQMessageConsumer$FacadeMessageListener.onMessage(MQMessageConsumer.java:324)
        at com.ibm.msg.client.jms.internal.JmsMessageConsumerImpl$JmsProviderMessageListener.onMessage(JmsMessageConsume
rImpl.java:1205)
        at com.ibm.msg.client.wmq.internal.WMQAsyncConsumerShadow.honourNoLocal(WMQAsyncConsumerShadow.java:717)
        at com.ibm.msg.client.wmq.internal.WMQAsyncConsumerShadow.consumer(WMQAsyncConsumerShadow.java:545)
        at com.ibm.mq.jmqi.remote.impl.RemoteProxyQueue.driveConsumer(RemoteProxyQueue.java:4350)
        at com.ibm.mq.jmqi.remote.impl.RemoteProxyQueue.deliverMsgs(RemoteProxyQueue.java:4937)
        at com.ibm.mq.jmqi.remote.impl.RemoteDispatchThread.deliverMsgsReconnectable(RemoteDispatchThread.java:531)
        at com.ibm.mq.jmqi.remote.impl.RemoteDispatchThread.deliverMsgs(RemoteDispatchThread.java:504)
        at com.ibm.mq.jmqi.remote.impl.RemoteDispatchThread.run(RemoteDispatchThread.java:275)
        at com.ibm.msg.client.commonservices.workqueue.WorkQueueItem.runTask(WorkQueueItem.java:319)
        at com.ibm.msg.client.commonservices.workqueue.SimpleWorkQueueItem.runItem(SimpleWorkQueueItem.java:99)
        at com.ibm.msg.client.commonservices.workqueue.WorkQueueItem.run(WorkQueueItem.java:341)
        at com.ibm.msg.client.commonservices.workqueue.WorkQueueManager.runWorkQueueItem(WorkQueueManager.java:312)
        at com.ibm.msg.client.commonservices.j2se.workqueue.WorkQueueManagerImplementation$ThreadPoolWorker.run(WorkQueu
eManagerImplementation.java:1227)
Caused by: java.lang.ClassNotFoundException: null class
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1614)
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1518)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1774)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
        at java.util.ArrayList.readObject(ArrayList.java:791)
        at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:1017)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1896)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1993)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1918)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1993)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1918)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1801)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1351)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
        at com.ibm.msg.client.jms.internal.JmsObjectMessageImpl.getObjectInternal(JmsObjectMessageImpl.java:418)
        at      com.ibm.msg.client.jms.internal.JmsObjectMessageImpl.getObject(JmsObjectMessageIm     pl.java:351)

1 个答案:

答案 0 :(得分:0)

嗯,听起来你没有在CLASSPATH中包含所有必需的MQ JAR文件。

对于使用MQ 7.5.0。*的应用程序,列表为:

  • CL3Export.jar
  • CL3Nonexport.jar
  • com.ibm.mq.commonservices.jar
  • com.ibm.mq.headers.jar
  • com.ibm.mq.jar
  • com.ibm.mq.jmqi.jar
  • com.ibm.mq.pcf.jar
  • com.ibm.mqjms.jar
  • connector.jar
  • dhbcore.jar
  • fscontext.jar
  • jms.jar com.ibm.mq.jmqi.jar
  • jndi.jar
  • ldap.jar
  • providerutil.jar
  • rmm.jar

对于使用MQ 8.0.0。*的应用程序,列表是(推荐方法):

  • com.ibm.mq.allclient.jar

或者对于旧学校的MQers,使用MQ 8.0.0。*的应用程序,列表是:

  • com.ibm.mq.commonservices.jar
  • com.ibm.mq.headers.jar
  • com.ibm.mq.jar
  • com.ibm.mq.jmqi.jar
  • com.ibm.mq.pcf.jar
  • com.ibm.mqjms.jar
  • fscontext.jar
  • jms.jar
  • providerutil.jar