java - 发送 jms 通过 ibm mq 通信时出现 NoSuchMethodException
问题描述
我在 Jboss EAP 7 上部署了带有 Spring 的 Java 应用程序我正在尝试与 IBM MQ 通信,因此我部署在版本 9.0.0.1 的 Jboss 资源适配器 wmq.jmsra.rar 上,并在我的 java 项目中添加了依赖项:
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>com.ibm.mq.connector</artifactId>
<version>9.0.0.1</version>
</dependency>
<dependency>
<groupId>com.ibm.mq</groupId>
<artifactId>com.ibm.mq.allclient</artifactId>
<version>9.0.0.1</version>
</dependency>
我确保这些版本与 allclient 和资源适配器相同。我已经从 ibm 站点下载的 9.0.0.10-IBM-MQ-Install-Java-All 中提取了所需的 allclient jar 和资源适配器。
尝试发送消息时出现以下异常:
Caused by: com.ibm.msg.client.jms.DetailedJMSException: JMSFMQ6312: An exception occurred in the Java(tm) MQI.
jboss_1 | The Java(tm) MQI has thrown an exception describing the problem.
jboss_1 | See the linked exception for further information.
jboss_1 | at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
jboss_1 | at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
jboss_1 | at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
jboss_1 | at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
jboss_1 | at deployment.wmq.jmsra.rar//com.ibm.msg.client.commonservices.j2se.NLSServices.createException(NLSServices.java:319)
jboss_1 | at deployment.wmq.jmsra.rar//com.ibm.msg.client.commonservices.nls.NLSServices.createException(NLSServices.java:226)
jboss_1 | at deployment.wmq.jmsra.rar//com.ibm.msg.client.wmq.factories.WMQXAConnectionFactory.createV7ProviderConnection(WMQXAConnectionFactory.java:172)
jboss_1 | at deployment.wmq.jmsra.rar//com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createProviderConnection(WMQConnectionFactory.java:7809)
jboss_1 | at deployment.wmq.jmsra.rar//com.ibm.msg.client.wmq.factories.WMQXAConnectionFactory.createProviderXAConnection(WMQXAConnectionFactory.java:98)
jboss_1 | at deployment.wmq.jmsra.rar//com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl.createXAConnectionInternal(JmsConnectionFactoryImpl.java:350)
jboss_1 | at deployment.wmq.jmsra.rar//com.ibm.mq.jms.MQXAConnectionFactory.createXAConnection(MQXAConnectionFactory.java:131)
jboss_1 | at deployment.wmq.jmsra.rar//com.ibm.mq.connector.ConnectionBuilder.createConnection(ConnectionBuilder.java:134)
jboss_1 | ... 63 more
jboss_1 | Caused by: com.ibm.mq.jmqi.JmqiException: CC=2;RC=2195;AMQ9546: Error return code received. [1=java.lang.NoSuchMethodException[com.ibm.mq.jmqi.remote.api.RemoteFAP.<init>(com.ibm.mq.jmqi.JmqiEnvironment, int)],3=Class.getConstructor0]
jboss_1 | at deployment.wmq.jmsra.rar//com.ibm.mq.jmqi.JmqiEnvironment.getInstance(JmqiEnvironment.java:793)
jboss_1 | at deployment.wmq.jmsra.rar//com.ibm.mq.jmqi.JmqiEnvironment.getMQI(JmqiEnvironment.java:638)
jboss_1 | at deployment.wmq.jmsra.rar//com.ibm.msg.client.wmq.factories.WMQXAConnectionFactory.createV7ProviderConnection(WMQXAConnectionFactory.java:164)
jboss_1 | ... 68 more
jboss_1 | Caused by: java.lang.NoSuchMethodException: com.ibm.mq.jmqi.remote.api.RemoteFAP.<init>(com.ibm.mq.jmqi.JmqiEnvironment, int)
jboss_1 | at java.base/java.lang.Class.getConstructor0(Class.java:3349)
jboss_1 | at java.base/java.lang.Class.getConstructor(Class.java:2151)
jboss_1 | at deployment.wmq.jmsra.rar//com.ibm.mq.jmqi.JmqiEnvironment.getInstance(JmqiEnvironment.java:700)
jboss_1 | ... 70 more
我已确保资源适配器具有此特定方法。我还能检查什么?
解决方案
这看起来像你有两个版本的同一个类,一个有这个方法,另一个没有,因此它在运行时失败,因为它选择了错误的类版本。
要解决这个问题,您可以在 jboss 中将类加载更改为详细。
cd <JBOSS_HOME>\bin\ 目录。
打开 $JBOSS_HOME/bin/standalone.conf
(bat 或 sh 文件)在文本编辑器中找到设置 JAVA_OPTS 的行(其中有几个),将 -verbose:class 添加到其中的任何一个。示例(Windows)设置“JAVA_OPTS=%JAVA_OPTS% -XX:+TraceClassLoading -verbose:class”</p>
保存文件。重新启动 JBoss 应用程序。
现在您在服务器日志中搜索此类。查看是否有多个条目并找到包含相同条目的 jar。
确定您需要的一个并删除另一个。
推荐阅读
- mysql - 避免三个表之间的重复行
- react-native - 如何在反应导航中实现此视图?
- asp.net - 在 asp.net 完整项目中禁用脚本
- python - tkinterhtml.HtmlFrame.set_content() 在使用 64 位 Python 时崩溃
- autodesk-forge - 如何在同一应用程序中加载两个伪造查看器(Angular Forge 查看器组件)
- javascript - what is (function(){}()) in object when i make a function
- android - 自定义圆形进度条
- sql - Convert character string into this specific date format?
- python - Why does calling np.array() on this list comprehension produce a 3d array instead of 2d?
- c# - Two Thread tasks in Winforms Continuously Checking Back