質問

この問題に数時間、この問題に固執しています、誰かが何かアイデアをしていますか?

java.lang.nosuchmethoderror:com.ibm.mq.mqexception。(ljava/lang/string; ljava/lang/string; ii)v at com.ibm.msg.client.wmq.common.internal.reason.createexcection(理由(理由.java:223)at com.ibm.msg.client.wmq.internal.wmqmessageconsumer.checkjmqicallsuccess(wmqmessageconsumer.java:123) )com.ibm.msg.client.wmq.internal.wmqsyncconsumershadow.receiveinternal(wmqsyncconsumershadow.java:233)at com.ibm.msg.client.wmq.internal.wmqconsumershadow. wmqconsumershaw.javadow. ibm.msg.client.wmq.internal.wmqmessageconsumer.receive(wmqmessageconsumer.java:450)at com.ibm.msg.client.jms.internal.jmessageconsumerimpl.receiveinboundmessage(jmssmessumerimpl.java:742) client.jms.internal.jmssageconsumerimpl.receive(jmsmessageconsumerimpl.java:423)com.ibm.mq.jms.mqmessageconsumer.receive(mqmessageconsumer.java:258)

MQネイティブライブラリを使用してメッセージを配置したときにこのエラーが発生し、JMS APIを使用してそれらを読み取ります。 JMSの読み取りは、上記の例外をスローすることに失敗します。また、問題を引き起こしていると思われるJMSセレクターも使用しています。セレクターを使用して、すべてが正常に機能します。ティア。

役に立ちましたか?

解決

最後に、私はこれを解決することができました、それはすべてセレクターの作成方法に関係していました。違いは、MQ APIがバイト配列として相関IDを持っていることであり、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(尋問、セレクター);

IBM Docsからコードを参照しました。

他のヒント

MQライブラリの間違ったバージョンがあります。最新のバージョンに対してコードを実行してみてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top