You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级JDK11后连接IBM MQ抛出NoSuchMethodException异常

问题背景
  • 变更场景:将运行环境从JDK 8、IBM MQ 9.2.0.4、WLS 12升级为JDK 11、IBM MQ 9.2.0.5、WLS 14,同步将应用依赖的allclient.jar升级至9.2.0.5版本后,尝试建立JMS连接时触发报错。
  • 交叉验证结果:相同业务代码在MQ 9.2.0.4 + JDK 8 + WLS 12环境下可正常运行;即使将MQ客户端版本回退至9.2.0.4,搭配JDK 11运行仍会复现相同问题。
  • 初步排查结论:报错指向的方法确实存在于当前应用引入的allclient.jar包中,应用依赖路径内不存在其他版本allclient.jar导致的依赖冲突。
完整报错堆栈
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]
    at com.ibm.mq.jmqi.JmqiEnvironment.getInstance(JmqiEnvironment.java:857)
    at com.ibm.mq.jmqi.JmqiEnvironment.getMQI(JmqiEnvironment.java:702)
    at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createV7ProviderConnection(WMQConnectionFactory.java:8437)
    at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createProviderConnection(WMQConnectionFactory.java:7815)
    at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl._createConnection(JmsConnectionFactoryImpl.java:322)
    at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl.createConnection(JmsConnectionFactoryImpl.java:242)
    at com.ibm.mq.jms.MQConnectionFactory.createCommonConnection(MQConnectionFactory.java:6026)
    at com.ibm.mq.jms.MQConnectionFactory.createConnection(MQConnectionFactory.java:6086)
    at org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter.doCreateConnection(UserCredentialsConnectionFactoryAdapter.java:188)
Caused by: java.lang.NoSuchMethodException: com.ibm.mq.jmqi.remote.api.RemoteFAP.<init>(com.ibm.mq.jmqi.JmqiEnvironment, int)
    at java.base/java.lang.Class.getConstructor0(Class.java:3349)
    at java.base/java.lang.Class.getConstructor(Class.java:2151)
    at com.ibm.mq.jmqi.JmqiEnvironment.getInstance(JmqiEnvironment.java:764)
根因说明

该问题并非应用内依赖冲突导致,核心原因是WLS 14默认采用父类加载器优先的类加载策略,会优先加载WLS自身内置的低版本IBM MQ客户端类,不会加载部署在应用内的高版本allclient.jar中的对应类。WLS内置的旧版RemoteFAP类不存在(JmqiEnvironment, int)参数格式的构造方法,因此抛出NoSuchMethodException。回退MQ客户端版本仍报错的原因也是类加载时始终读取WLS内置的旧版类,和应用内引入的jar包版本无关。

修复步骤
  • 登录WLS 14控制台,找到对应部署的应用配置,将类加载策略修改为PARENT_LAST(应用类优先加载),强制JVM优先读取应用自带的依赖包,再读取WLS内置的公共类。
  • 检查WLS安装目录下的系统类路径(如wlserver/server/lib、域目录下的lib文件夹),如果存在旧版本的com.ibm.mq.jmqi.jar、com.ibm.mq.allclient.jar等IBM MQ相关客户端包,直接从该路径下移出,避免类加载时误读取旧版本类。
  • 重启WLS服务后重新验证JMS连接即可恢复正常。

内容的提问来源于stack exchange,提问作者Alon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 22:57:23