Вопрос

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

java.lang.noSuchmethodError: com.ibm.mq.mqException. (ljava / lang / string; ljava / lang / string; ii) v на com.ibm.msg.client.wmq.common.internal.reason.rueeeeexception .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.wmqsyncconsumershadow.receiveNidernal (wmqsyncconsumershadow.java:233) в com.ibm.msg.client.wmq.internal.wmqconsumershadow.receive (wmqconsumershadow.java:922) в ком. IBM.MSG.client.wmq.internal.wmqmessageConsumer.receive (wmqmessageConsumer.java:450) на com.ibm.msg.client.jms.internal.jmsmessageConsumerimpl.jmsmessageConsumessage (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 API имеет корреляционный идентификатор в качестве массива байтов, где в качестве JMS принимает его в виде строки. Из-за этого селектор не смог выбрать сообщение и бросил опубликованную ошибку. Ошибка не совсем удобная для отладки, следовательно, должна была сделать много испытаний и ошибок. В любом случае сейчас это работает, поэтому я рад. Ниже приведен ли код изменения, который мне пришлось сделать для этого:

// Строковый селектор = "jmscorrelationId = '" + CorleationInid + "'"; до смены

        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 = QueoUsession.CreeSeaceiver (Inqueue, Selector);

Ссылается код из IBM Docs.

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top