Ibm mq com.ibm.mq.MQException

Ibm mq com.ibm.mq.MQException,ibm-mq,osb,Ibm Mq,Osb,这个问题已经解决了几个小时了,有人有什么想法吗 java.lang.NoSuchMethodError:com.ibm.mq.MQException。(Ljava/lang/String;Ljava/lang/String;II)V 位于com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:223) 位于com.ibm.msg.client.wmq.internal.WMQMessageConsumer

这个问题已经解决了几个小时了,有人有什么想法吗

java.lang.NoSuchMethodError:com.ibm.mq.MQException。(Ljava/lang/String;Ljava/lang/String;II)V 位于com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:223) 位于com.ibm.msg.client.wmq.internal.WMQMessageConsumer.checkJmqiCallSuccess(WMQMessageConsumer.java:123) 位于com.ibm.msg.client.wmq.internal.WMQConsumerShadow.getMsg(WMQConsumerShadow.java:1198) 位于com.ibm.msg.client.wmq.internal.wmqsynconsumershadow.receiveInternal(wmqsynconsumershadow.java:233) 位于com.ibm.msg.client.wmq.internal.WMQConsumerShadow.receive(WMQConsumerShadow.java:922) 位于com.ibm.msg.client.wmq.internal.WMQMessageConsumer.receive(WMQMessageConsumer.java:450) 位于com.ibm.msg.client.jms.internal.JmsMessageConsumerImpl.receiveInboundMessage(JmsMessageConsumerImpl.java:742) 位于com.ibm.msg.client.jms.internal.JmsMessageConsumerImpl.receive(JmsMessageConsumerImpl.java:423) 位于com.ibm.mq.jms.MQMessageConsumer.receive(MQMessageConsumer.java:258)


当我使用MQ本机库放置消息并使用JMS API读取它们时,我遇到了这个错误。jms读取无法引发上述异常。我还使用了jms选择器,这似乎是造成问题的原因。没有选择器,一切正常。TIA。

您的MQ库版本错误。尝试运行最新版本的代码。

最后我解决了这个问题,这一切都与选择器的创建方式有关。不同之处在于,MQ API的关联id为字节数组,而as JMS将其作为字符串。因此,选择器无法选择消息,并抛出已发布的错误。该错误根本不利于调试,因此必须进行大量的反复试验。不管怎么说,现在这个工作,所以我很高兴。以下是我为此所做的代码更改:

//字符串选择器=“JMSCorrelationID=”+corleationID+”;变动前

StringBuffer fBuf=newstringbuffer(“JMSCorrelationID='ID:”);
byte[]correlBytes=corleationID.getBytes();
for(int i=0;i=correlBytes.length){
fBuf.附加(“00”);
}否则{
字节b=相关字节[i];
字符串hextr=Integer.tohextstring(b);
//-ve值产生8个字符的结果
如果(hexStr.length()>2)hexStr=hexStr.substring(hexStr.length()-2);
//小值产生1个字符的结果

如果(hexStr.length(),我使用的是最新的MQ库(MQ v.7)。我已经将场景缩小到这一点。我通过MQ库放置消息,并使用JMS API读取相同的消息。
        StringBuffer fBuf = new StringBuffer("JMSCorrelationID = 'ID:");
        byte[] correlBytes = corleationID.getBytes();
        for(int i=0; i<24; i++) {
          if (i>=correlBytes.length) {
            fBuf.append("00");
          } else {
            byte b = correlBytes[i];
            String hexStr = Integer.toHexString(b);
            // -ve values produce 8 char results
            if (hexStr.length()>2) hexStr = hexStr.substring(hexStr.length()-2);
            // small values produce 1 char results
            if (hexStr.length()<2) fBuf.append("0");
            fBuf.append(hexStr);
          }
        }
        fBuf.append("'");
        String filter = fBuf.toString();
        System.out.println("creating receiver with filter: "+filter);
        QueueReceiver queueReceiver = queueSession.createReceiver(inQueue,filter);