com.ibm.mq.MQException - PullRequest
       35

com.ibm.mq.MQException

0 голосов
/ 23 сентября 2010

Застряли с этой проблемой в течение нескольких часов, кто-нибудь есть идеи?

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.WMQSavahons ()233) по адресу com.ibm.msg.client.wmq.internal.WMQConsumerShadow.receive (WMQConsumerShadow.java:922) по адресу com.ibm.msg.client.wmq.internal.WMQMessageConsumer.receive (WMQMessjaC50).ibm.msg.client.jms.internal..jms.MQMessageConsumer.receive (MQMessageConsumer.java:258)

Получаю эту ошибку, когда я помещаю сообщение, используя собственные библиотеки MQ, и читаю их, используя JMS API.Считывание jms завершается с ошибкой и выдает исключение выше.Я также использую селектор jms, который, кажется, вызывает проблему.без селектора все работает нормально.ТИА.

Ответы [ 2 ]

2 голосов
/ 24 сентября 2010

Наконец-то я смог решить эту проблему, все это было связано с тем, как создается селектор. Разница была в том, что MQ API имеют идентификатор корреляции в виде байтового массива, где JMS воспринимает его как строку. Из-за этого селектор не смог выбрать сообщение и выбросил опубликованную ошибку. Ошибка совсем не удобна для отладки, поэтому пришлось делать много проб и ошибок. В любом случае, теперь это работает, поэтому я рад. Ниже приведено изменение кода, которое я должен был сделать для этого:

// 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, селектор);

Передан код из документации IBM.

0 голосов
/ 23 сентября 2010

У вас неправильная версия библиотек MQ.Попробуйте запустить свой код с новейшими версиями.

...