Java 8 NoClassDefFoundError无法初始化类com.ibm.mq.headers.internal.HeaderType

Java 8 NoClassDefFoundError无法初始化类com.ibm.mq.headers.internal.HeaderType,java-8,ibm-mq,spring-jms,spring-4,Java 8,Ibm Mq,Spring Jms,Spring 4,我们已经升级到IBMMQ8,并且在我们的项目中有以下依赖项。存在以下依赖项 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 然而,在运行主程序时,它给出了nodefounderror,尽管在类路径中提供了jar Caused by: java.lang.No

我们已经升级到IBMMQ8,并且在我们的项目中有以下依赖项。存在以下依赖项

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
然而,在运行主程序时,它给出了
nodefounderror
,尽管在类路径中提供了jar

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]
原因:java.lang.NoClassDefFoundError:无法初始化类com.ibm.mq.headers.internal.HeaderType
在com.ibm.mq.headers.pcf.PCFMessage.(PCFMessage.java:77)~[com.ibm.mq.headers-7.5.0.6.jar:7.5.0.6-p750-006-160226]
在com.ibm.mq.headers.pcf.PCFMessage.(PCFMessage.java:132)~[com.ibm.mq.headers-7.5.0.6.jar:7.5.0.6-p750-006-160226]
在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]
在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]
在com.ibm.mq.ese.intercept.JmqiOpenInterceptorImpl.ReadPolicyIAvailable(JmqiOpenInterceptorImpl.java:321)~[com.ibm.mq.jmqi-7.5.0.6.jar:7.5.0.6-p750-006-160226]
在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]
在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]
在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]
在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]
在com.ibm.msg.client.wmq.internal.WMQMessageProducer.(WMQMessageProducer.java:995)~[com.ibm.mqjms-7.5.0.6.jar:7.5.0.6-p750-006-160226]
在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]
在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]
在com.ibm.msg.client.jms.internal.jmsquesessionimpl.createSender(jmsquesessionimpl.java:136)~[com.ibm.mqjms-7.5.0.6.jar:7.5.0.6-p750-006-160226]
在com.ibm.mq.jms.MQQueueSession.createSender(MQQueueSession.java:153)~[com.ibm.mqjms-7.5.0.6.jar:7.5.0.6-p750-006-160226]
在com.ibm.mq.jms.MQQueueSession.createProducer(MQQueueSession.java:254)~[com.ibm.mqjms-7.5.0.6.jar:7.5.0.6-p750-006-160226]
在org.springframework.jms.core.JmsTemplate.doCreateProducer(JmsTemplate.java:1114)~[spring-jms-4.3.4.RELEASE.jar:4.3.4.RELEASE]
在org.springframework.jms.core.JmsTemplate.createProducer(JmsTemplate.java:1095)~[spring-jms-4.3.4.RELEASE.jar:4.3.4.RELEASE]
在org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate.doSendToDestination(JmsConfiguration.java:482)~[camel-jms-2.17.0.jar:2.17.0]
在org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate.access$100(JmsConfiguration.java:428)~[camel-jms-2.17.0.jar:2.17.0]
在org.apache.camel.component.jms.JmsConfiguration$CamelJmsTemplate$1.doInJms(JmsConfiguration.java:442)~[camel-jms-2.17.0.jar:2.17.0]
在org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:484)~[spring-jms-4.3.4.RELEASE.jar:4.3.4.RELEASE]
  • 您是否将MQ服务器升级到v8或将MQ客户端升级到v8或两者都升级
  • 它们在同一台机器上运行吗
  • 堆栈跟踪显示所有jar文件都已重命名,以包含字符串
    7.5.0.6
    ,这表明它们来自MQ v7.5.0.6 MQ客户端安装。IBM不支持从v8.0之前的标准安装位置移动jar文件
  • 在mqv8.0及更高版本中,IBM提供了一个只支持java的安装,可以安装在任何地方
  • 在MQ v8.0和更高版本中,IBM还允许将文件
    com.IBM.MQ.allclient.jar
    com.IBM.MQ.traceControl.jar
    从完整的客户端或服务器安装重新定位到同一企业中的其他服务器和位置,上述文件包含以前位于单独jar文件中的所有类
  • 建议从名称中删除所有带有7.5.0.6的jar文件,并坚持使用IBM随MQ v8.0提供的两个jar文件


    根据OP@IMahajan,升级了以下组件:Spring、Camel、Java和包括JMS在内的所有相关jar。

    非常感谢您的输入。我发现分辨率是jar的版本。我向V8提供了更高版本的com.ibm.mq.headers(包含HeaderType.Class),并在类路径中提供了它。成功了。我认为mq8与v7.5.0.6不兼容。如果您觉得不一样,请更新。

    请注意,NoClassDefFoundError与ClassNotFoundException并不完全相同。这意味着之前有一个异常或错误中断了HeaderType类的正确初始化。这可能是类路径问题,也可能完全是其他问题。正如JoshMC所说,allclient.jar是一个更好的选择。还要注意的是,当您使用Spring+Camel时,类加载可能与JavaSE应用程序不同。根据上一条评论,我建议您在日志文件中搜索“clinit”-“无法初始化类”消息表示该类静态初始化失败,所以HeaderType有可能是个例外。在堆栈跟踪中。删除了7.5.0.6中的所有文件,并添加了v8。但现在它的给出“由以下原因引起:java.lang.NoClassDefFoundError:javax/jms/JMSRuntimeException位于java.lang.Class.getDeclaredConstructors0(本机方法)~[na:1.8.092]由以下原因引起:java.lang.ClassNotFoundException:javax.jms.JMSRuntimeException