0

数時間この問題に悩まされていますが、誰かアイデアはありますか?

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

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

4

2 に答える 2

2

ついに私はこれを解決することができました、それはすべてセレクターがどのように作成されるかに関係していました。違いは、MQ APIの相関IDがバイト配列であるのに対し、JMSはそれを文字列として受け取ることです。このため、セレクターはメッセージを選択できず、投稿されたエラーをスローしていました。このエラーはデバッグに適しているわけではないため、多くの試行錯誤を繰り返す必要がありました。とにかく今これはうまくいくので私はうれしいです。以下は私がこれのためにしなければならなかったコード変更です:

//文字列セレクター="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ドキュメントからコードを参照しました。

于 2010-09-24T05:05:33.167 に答える
0

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

于 2010-09-23T08:00:04.320 に答える