2017-04-24 155 views
0

我在從MQ消費時反序列化消息時遇到問題。該應用程序部署在weblogic上,並通過weblogic外部服務器配置連接到MQ。消息的內容是一個Spring集成框架類(ChunkRequest),我確保所有相關的庫都位於接收端的weblogic類路徑中。在接收端我得到一個ClassNotFoundException。IBM MQ - 消息反序列化期間的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) 
+0

您正在使用什麼版本的IBM MQ jar文件嗎? – JoshMc

+0

我已經嘗試過2個版本的MQ庫7.5和8. – dknight

+0

什麼特定的版本是ex 7.5.0.7或8.0.0.5? – JoshMc

回答

0

嗯,這聽起來像是你在CLASSPATH中不包括所有必需的MQ JAR文件。 。

對於使用MQ 7.5.0應用*,名單是:

  • CL3Export.jar
  • CL3Nonexport.jar
  • com.ibm.mq.commonservices.jar
  • 融爲一體。 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。罐子
  • jms.jar
  • providerutil.jar
+1

我有jar(com.ibm.mq.allclient.jar)打包在我的應用程序中,並且出現錯誤。 – dknight