2017-05-08 219 views
1

在尝试从MQMessage对象中使用MQHeaderIterator提取MQHeaders时出现以下错误。我正在使用下面的代码行并获取下面的异常。在classpath下面还添加了jar,但仍然显示错误。使用IBM MQ Java错误:: java.lang.ClassNotFoundException:com.ibm.mq.internal.MQCommonServices

库:

com.ibm.mq.jar 
com.ibm.mq.headers.jar 
com.ibm.mq.commonservices.jar 
com.ibm.mq.jmqi.jar 
com.ibm.mq.pcf.jar 

代码:

//Giving error in this line 
MQHeaderIterator it = new MQHeaderIterator(theMessage); 

其投掷如下例外。

Exception in thread "main" java.lang.NoClassDefFoundError: com/ibm/mq/internal/MQCommonServices 
    at com.ibm.mq.headers.MQHeaderIterator.<init>(MQHeaderIterator.java:112) 
    at com.test.mq.util.MQClass.main(MQClass.java:69) 
Caused by: java.lang.ClassNotFoundException: com.ibm.mq.internal.MQCommonServices 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    ... 2 more 

请大家建议此错误的可能原因主要是当某些jar文件丢失时发生错误。我在这里错过了什么吗?

+0

你明白堆栈跟踪? –

+1

我建议您将类路径指向包含所有必需jar文件的原始IBM MQ安装位置的'java/lib'目录,IBM不支持将jar文件复制到不同位置,直到v8在这种情况下它们已添加支持用于重定位但将所需的所有内容合并到两个jar文件com.ibm.mq.allclient.jar和com.ibm.mq.traceControl.jar中,该文件可以从完整的MQ Server或MQ Client安装到另一个位置在你的企业中。 – JoshMc

+0

正如所建议的那样,我将原始IBM MQ安装位置的完整MQ Java/lib的类路径添加到我的程序中,现在它的工作正常。非常感谢您的建议。请添加此解决方案作为评论的答案对他人有帮助。非常感谢:) –

回答

2

简而言之,将classpath指向原始IBM MQ安装位置的java/lib目录,其中包含ALL必需的jar文件。


更多细节:

IBM不支持jar文件复制到在这种情况下,他们已经增加了支持搬迁,但已经联合一切需要为两个jar文件com.ibm.mq.不同的位置,直到V8 allclient.jar和com.ibm.mq.traceControl.jar可以从完整的MQ Server或MQ Client安装到企业中的其他位置。

有关更多详细信息,请参阅IBM Technote“Starting with MQ 8.0, you can use Relocatable JAR Files”上的“从MQ 8.0开始,您可以使用Relocatable JAR文件”一节。

的WebSphere MQ 8.0.0> IBM MQ>开发应用程序>开发与IBM MQ为针对Java> What is installed for IBM MQ classes for Java

IBM MQ类 爪哇>安装和配置 面向对象应用程序>使用IBM MQ类

重新定位的JAR文件

在企业内部,以下文件可以移动到需要运行IBM MQ类为Java应用系统 :

  • com.ibm.mq.allclient.jar
  • com.ibm.mq.traceControl.jar

文件com.ibm.mq.allclient.jar包含IBM MQ类 JMS ,用于Java的IBM MQ类以及PCF和标题类。如果 将此文件移动到新位置,请确保您采取步骤 通过新的IBM MQ修订包来维护这个新位置。另外,如果 正在获得临时修订, 请确保IBM文档的使用已知。

要确定文件com.ibm.mq.allclient.jar的版本,请使用 命令:java -jar com.ibm.mq.allclient。罐子


注意,所有的MQ版本7.1和更早的版本是从IBM服务的结束。 IBM MQ v7.5的服务日期为2018年4月30日。

我建议您将v8.0或v9.0版本还未公布服务日期。较新的MQ客户端版本可以连接到较早的MQ队列管理器。你可以下载一个java只有在以下链接9.0 jar文件安装MQ 8.0或MQ的: