2017-02-11 48 views
2

Мы обновили до IBM MQ8 и имеем следующие зависимости в нашем проекте. Следующая зависимость существуетNoClassDefFoundError Не удалось инициализировать класс com.ibm.mq.headers.internal.HeaderType

com.ibm.disthub2.dhbcore 
com.ibm.mq.jmqi 
com.ibm.mqjms 
ibm-jaxrpc-client 
com.ibm.mq 
com.ibm.mq.headers 
com.ibm.mq.pcf 
com.ibm.mq.commonservices 

Однако при выполнении основной программы, она дает NoDefFoundError, несмотря на предоставлении банки в пути к классам.

Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.ibm.mq.headers.internal.HeaderType 
     at com.ibm.mq.headers.pcf.PCFMessage.<init>(PCFMessage.java:77) ~[com.ibm.mq.headers-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.mq.headers.pcf.PCFMessage.<init>(PCFMessage.java:132) ~[com.ibm.mq.headers-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.mq.ese.service.PolicyServiceImpl.policyFromPcf(PolicyServiceImpl.java:575) ~[com.ibm.mq.jmqi-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.mq.ese.intercept.JmqiOpenInterceptorImpl.storeSecurityInfoInSmqiObject(JmqiOpenInterceptorImpl.java:359) ~[com.ibm.mq.jmqi-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.mq.ese.intercept.JmqiOpenInterceptorImpl.readPolicyIfAvailable(JmqiOpenInterceptorImpl.java:321) ~[com.ibm.mq.jmqi-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.mq.ese.intercept.JmqiOpenInterceptorImpl.afterSpiOpen(JmqiOpenInterceptorImpl.java:203) ~[com.ibm.mq.jmqi-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.mq.ese.jmqi.InterceptedJmqiImpl.spiOpen(InterceptedJmqiImpl.java:411) ~[com.ibm.mq.jmqi-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.mq.ese.jmqi.ESEJMQI.spiOpen(ESEJMQI.java:513) ~[com.ibm.mq.jmqi-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.msg.client.wmq.internal.WMQMessageProducer$SpiIdentifiedProducerShadow.initialise(WMQMessageProducer.java:762) ~[com.ibm.mqjms-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.msg.client.wmq.internal.WMQMessageProducer.<init>(WMQMessageProducer.java:995) ~[com.ibm.mqjms-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.msg.client.wmq.internal.WMQSession.createProducer(WMQSession.java:889) ~[com.ibm.mqjms-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.msg.client.jms.internal.JmsSessionImpl.createProducer(JmsSessionImpl.java:1232) ~[com.ibm.mqjms-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.msg.client.jms.internal.JmsQueueSessionImpl.createSender(JmsQueueSessionImpl.java:136) ~[com.ibm.mqjms-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.mq.jms.MQQueueSession.createSender(MQQueueSession.java:153) ~[com.ibm.mqjms-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at com.ibm.mq.jms.MQQueueSession.createProducer(MQQueueSession.java:254) ~[com.ibm.mqjms-7.5.0.6.jar:7.5.0.6 - p750-006-160226] 
     at org.springframework.jms.core.JmsTemplate.doCreateProducer(JmsTemplate.java:1114) ~[spring-jms-4.3.4.RELEASE.jar:4.3.4.RELEASE] 
     at org.springframework.jms.core.JmsTemplate.createProducer(JmsTemplate.java:1095) ~[spring-jms-4.3.4.RELEASE.jar:4.3.4.RELEASE] 
     at org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate.doSendToDestination(JmsConfiguration.java:482) ~[camel-jms-2.17.0.jar:2.17.0] 
     at org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate.access$100(JmsConfiguration.java:428) ~[camel-jms-2.17.0.jar:2.17.0] 
     at org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate$1.doInJms(JmsConfiguration.java:442) ~[camel-jms-2.17.0.jar:2.17.0] 
     at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:484) ~[spring-jms-4.3.4.RELEASE.jar:4.3.4.RELEASE] 
+0

Помните, что NoClassDefFoundError не совсем такой же, как ClassNotFoundException. Это говорит о том, что было предыдущее исключение или ошибка, которая прервала правильную инициализацию класса HeaderType. Это может быть проблема с classpath или это может быть что-то другое. Как сказал JoshMC - allclient.jar - лучший вариант. Также имейте в виду, что при использовании Spring + Camel загрузка классов может отличаться от приложения JavaSE. – Calanais

+0

Чтобы получить ответ на этот последний комментарий, я предлагаю вам искать файлы журналов для «clinit» - сообщение «Не удалось инициализировать класс» означает, что класс не прошел статическую инициализацию, поэтому есть вероятность, что где-то есть исключение с HeaderType. в трассировке стека. – Jarid

ответ

2
  1. ли обновить вас сервер MQ для v8 или MQ клиента v8 или оба?
  2. Они работают на одной машине?
  3. Трассировка стека показывает, что все файлы jar были переименованы, чтобы включить строку 7.5.0.6, которая указывает, что они из MQ v7.5.0.6 MQ установки клиента. IBM не поддерживает перемещение файлов jar из стандартного места установки до версии 8.0.
  4. В MQ v8.0 и более поздних версиях IBM предоставляет только java-установку, которая может быть расположена в любом месте.
  5. В MQ v8.0 и более поздних версиях IBM также позволяет переносить файлы com.ibm.mq.allclient.jar и com.ibm.mq.traceControl.jar с полного клиента или сервера на другие серверы и локации того же предприятия, указанные файлы содержат все классы, которые ранее были в отдельном jar файлов.

Было бы желательно удалить все файлы jar с 7.5.0.6 из названия и использовать два файла jar, предоставленные IBM MQ v8.0.

В отношении OP @IMahajan были обновлены следующие компоненты: Spring, Camel, Java и все связанные банки, включая JMS.

0

Большое спасибо за ваш вклад. Я нашел, что резолюция была версией банки. Я предоставил более высокую версию com.ibm.mq.headers (содержащую HeaderType.Class) для V8 и предоставил ее в пути к классу. Это сработало. Я думаю, что mq8 несовместим с v7.5.0.6. Обновляйте, если вы чувствуете себя иначе.

+0

Удалены все файлы с 7.5.0.6 и добавлены v8. Но теперь его предоставление «Вызванный: java.lang.NoClassDefFoundError: javax/JMS/JMSRuntimeException на java.lang.Class.getDeclaredConstructors0 (Native Method) ~ [на: 1.8.0_92] Вызванный: java.lang. ClassNotFoundException: javax.jms.JMSRuntimeException at java.net.URLClassLoader.findClass (URLClassLoader.java:381) ~ [na: 1.8.0_92] at java.lang.ClassLoader.loadClass (ClassLoader.java:424) ~ [na : 1.8.0_92] на « – IMahajan

+0

Спасибо, я получил его работу. В соответствии с вашей рекомендацией я удалил все остальные банки и сохранил только два, как упоминалось вами. Он также требовал обновления JMS, после чего он отлично работал – IMahajan

+0

Да, это была весна и верблюд. Это была весна, верблюд, обновление Java и, следовательно, все связанные банки, включая JMS. Я уже голосовал за ваш ответ – IMahajan