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

Spring Boot连接启用AMS的IBM MQ时出现NoSuchMethodError问题求助

问题:Spring Boot连接启用AMS的IBM MQ时unprotect操作抛出NoSuchMethodError

我们正尝试通过Spring Boot应用连接已启用AMS(高级消息安全性)的IBM MQ,消息能被消费,但执行unprotect操作时抛出异常。此前应用运行正常,且确认Bouncy Castle jar版本兼容,升级该jar后问题仍未解决。

错误堆栈跟踪

WARN  org.apache.camel.component.jms.DefaultJmsMessageListenerContainer - Setup of JMS message listener invoker failed for destination 'IBM.MQ' - trying to recover. Cause: 'org.bouncycastle.asn1.ASN1Primitive org.bouncycastle.asn1.ASN1TaggedObject.getObject()'
java.lang.NoSuchMethodError: 'org.bouncycastle.asn1.ASN1Primitive org.bouncycastle.asn1.ASN1TaggedObject.getObject()'
at org.bouncycastle.asn1.cms.ContentInfo.<init>(Unknown Source) ~[bcprov-jdk15on.jar:1.68.0]
at org.bouncycastle.asn1.cms.ContentInfo.getInstance(Unknown Source) ~[bcprov-jdk15on.jar:1.68.0]
at org.bouncycastle.cms.CMSUtils.readContentInfo(Unknown Source) ~[bcpkix-jdk15on.jar:1.68.00.0]
at org.bouncycastle.cms.CMSUtils.readContentInfo(Unknown Source) ~[bcpkix-jdk15on.jar:1.68.00.0]
at org.bouncycastle.cms.CMSEnvelopedData.<init>(Unknown Source) ~[bcpkix-jdk15on.jar:1.68.00.0]
at com.ibm.mq.ese.prot.MessageProtectionBCImpl.unprotect(MessageProtectionBCImpl.java:742) ~[com.ibm.mq.jmqi.jar:9.2.2.0 - p922-L210310.DE]
at com.ibm.mq.ese.prot.MessageProtectionWrapper.unprotect(MessageProtectionWrapper.java:99) ~[com.ibm.mq.jmqi.jar:9.2.2.0 - p922-L210310.DE]
at com.ibm.mq.ese.intercept.JmqiGetInterceptorImpl.unprotect(JmqiGetInterceptorImpl.java:2264) ~[com.ibm.mq.jmqi.jar:9.2.2.0 - p922-L210310.DE]
at com.ibm.mq.ese.intercept.JmqiGetInterceptorImpl.process(JmqiGetInterceptorImpl.java:1284) ~[com.ibm.mq.jmqi.jar:9.2.2.0 - p922-L210310.DE]
at com.ibm.mq.ese.intercept.JmqiGetInterceptorImpl.unprotectMessage(JmqiGetInterceptorImpl.java:661) ~[com.ibm.mq.jmqi.jar:9.2.2.0 -p922-L210310.DE]
at com.ibm.mq.ese.intercept.JmqiGetInterceptorImpl.afterGet(JmqiGetInterceptorImpl.java:512) ~[com.ibm.mq.jmqi.jar:9.2.2.0 - p922-L210310.DE]
at com.ibm.mq.ese.intercept.JmqiGetInterceptorImpl.afterJmqiGet(JmqiGetInterceptorImpl.java:222) ~[com.ibm.mq.jmqi.jar:9.2.2.0 - p922-L210310.DE]
at com.ibm.mq.ese.jmqi.InterceptedJmqiImpl.jmqiGet(InterceptedJmqiImpl.java:1377) ~[com.ibm.mq.jmqi.jar:9.2.2.0 - p922-L210310.DE]
at com.ibm.mq.ese.jmqi.ESEJMQI.jmqiGet(ESEJMQI.java:602) ~[com.ibm.mq.jmqi.jar:9.2.2.0 - p922-L210310.DE]
at com.ibm.msg.client.wmq.internal.WMQConsumerShadow.getMsg(WMQConsumerShadow.java:1795) ~[com.ibm.mqjms.jar:9.2.2.0 - p922-L210310.DE]
at com.ibm.msg.client.wmq.internal.WMQSyncConsumerShadow.receiveInternal(WMQSyncConsumerShadow.java:228) ~[com.ibm.mqjms.jar:9.2.2.0- p922-L210310.DE]
at com.ibm.msg.client.wmq.internal.WMQConsumerShadow.receive(WMQConsumerShadow.java:1461) ~[com.ibm.mqjms.jar:9.2.2.0 - p922-L210310.DE]
at com.ibm.msg.client.wmq.internal.WMQMessageConsumer.receive(WMQMessageConsumer.java:674) ~[com.ibm.mqjms.jar:9.2.2.0 - p922-L210310.DE]
at com.ibm.msg.client.jms.internal.JmsMessageConsumerImpl.receiveInboundMessage(JmsMessageConsumerImpl.java:1051) ~[com.ibm.mqjms.jar:9.2.2.0 - p922-L210310.DE]
at com.ibm.msg.client.jms.internal.JmsMessageConsumerImpl.receive(JmsMessageConsumerImpl.java:667) ~[com.ibm.mqjms.jar:9.2.2.0 - p922-L210310.DE]
at com.ibm.mq.jms.MQMessageConsumer.receive(MQMessageConsumer.java:209) ~[com.ibm.mqjms.jar:9.2.2.0 - p922-L210310.DE]
at org.springframework.jms.support.destination.JmsDestinationAccessor.receiveFromConsumer(JmsDestinationAccessor.java:132) ~[spring-jms-5.3.27.jar:5.3.27]
at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveMessage(AbstractPollingMessageListenerContainer.java:431) ~[spring-jms-5.3.27.jar:5.3.27]
at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:316) ~[spring-jms-5.3.27.jar:5.3.27]
at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:270) ~[spring-jms-5.3.27.jar:5.3.27]
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1237) ~[spring-jms-5.3.27.jar:5.3.27]
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1227) ~[spring-jms-5.3.27.jar:5.3.27]
at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1120) [spring-jms-5.3.27.jar:5.3.27]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
at java.lang.Thread.run(Thread.java:829) [?:?]

解决思路

  • 排查Bouncy Castle版本冲突:错误提示ASN1TaggedObject.getObject()方法找不到,这是Bouncy Castle版本不匹配的典型问题。即使你确认过版本兼容,也要检查项目中是否存在多个版本的Bouncy Castle jar(如bcprov、bcpkix)。通过mvn dependency:tree(Maven)或./gradlew dependencies(Gradle)生成依赖树,排除多余的旧版本,确保bcprov-jdk15on和bcpkix-jdk15on版本完全一致,且与IBM MQ 9.2.2兼容。IBM MQ 9.2.x推荐使用Bouncy Castle 1.68或1.70版本,禁止混用不同大版本。
  • 升级IBM MQ客户端版本:当前使用的IBM MQ客户端版本为9.2.2.0,该版本可能存在与Spring JMS 5.3.27的适配问题。尝试升级到9.2.5.0或更高的9.2.x维护版本,此类版本通常会修复第三方库的兼容性问题。
  • 验证AMS配置一致性:确认应用端的AMS配置(密钥库/信任库路径、密码、加密算法等)与MQ服务器端完全一致。若服务器端使用了特定ASN.1编码格式,而客户端Bouncy Castle版本不支持,也会触发此类方法找不到错误。
  • 强制刷新依赖缓存:Maven/Gradle的本地缓存可能存在旧版本jar残留,执行mvn clean install -U(Maven)或./gradlew clean build --refresh-dependencies(Gradle)强制刷新依赖,确保下载的是指定版本的Bouncy Castle和IBM MQ客户端jar。

IBM MQ兼容依赖下载渠道

  • Maven依赖坐标:直接在pom.xml中添加IBM MQ客户端依赖,使用IBM官方Maven仓库自动下载:
    <dependency>
        <groupId>com.ibm.mq</groupId>
        <artifactId>com.ibm.mq.allclient</artifactId>
        <version>9.2.5.0</version>
    </dependency>
    
  • IBM Fix Central:若需手动下载特定版本的客户端安装包或补丁,可通过IBM Fix Central搜索"IBM MQ",选择对应版本和平台下载。
  • Bouncy Castle官方发布:获取兼容版本的bcprov-jdk15on和bcpkix-jdk15on jar,确保两个jar版本统一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 01:42:03