com.ibm.mq.MQException

时间:2010-09-23 07:40:48

标签: 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)    at com.ibm.msg.client.wmq.internal.WMQMessageConsumer.checkJmqiCallSuccess(WMQMessageConsumer.java:123)    在com.ibm.msg.client.wmq.internal.WMQConsumerShadow.getMsg(WMQConsumerShadow.java:1198)    at com.ibm.msg.client.wmq.internal.WMQSyncConsumerShadow.receiveInternal(WMQSyncConsumerShadow.java:233)    在com.ibm.msg.client.wmq.internal.WMQConsumerShadow.receive(WMQConsumerShadow.java:922)    在com.ibm.msg.client.wmq.internal.WMQMessageConsumer.receive(WMQMessageConsumer.java:450)    at com.ibm.msg.client.jms.internal.JmsMessageConsumerImpl.receiveInboundMessage(JmsMessageConsumerImpl.java:742)    at 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 Selector,这似乎导致了问题。没有选择器一切正常。 TIA。

2 个答案:

答案 0 :(得分:2)

最后我能够解决这个问题,这一切都与选择器的创建方式有关。区别在于MQ API将相关id作为字节数组,而JMS将其作为字符串。因此,Selector无法选择消息并抛出发布的错误。该错误根本不适合调试,因此不得不进行大量的试验和错误。无论如何现在这个工作,所以我很高兴。以下是我必须为此做的代码更改:

  

// String selector =“JMSCorrelationID ='”+ corleationID +“'”;在改变之前

        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);
  

// QueueReceiver queueReceiver = queueSession.createReceiver(inQueue,selector);

引用了IBM docs的代码。

答案 1 :(得分:0)

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