Pregunta

se han pegado con este problema durante unas horas Ahora, cualquier persona alguna idea?

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

Am conseguir este error cuando pongo el mensaje utilizando bibliotecas nativas de MQ y los leo utilizando JMS API. Las JMS leído es infructuosa lanzar la excepción anteriormente. También estoy usando JMS Selector de lo que parece ser la causa del problema. con el selector de todo funciona bien. TIA.

¿Fue útil?

Solución

Finally i was able to resolve this, it all had to do with how the selector is created. The difference was that MQ API's have correlation id as bytes array where as JMS takes it as a string. Due to this the Selector was unable to select the message and was throwing the posted error. The error is not at all debug friendly hence had to do a lot of trial and error. Anyways now this works so i am glad. Below is the code change i had to do for this:

//String selector = "JMSCorrelationID = '" + corleationID + "'"; before change

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

Referred the code from IBM docs.

Otros consejos

You've got wrong version of MQ libraries. Try to run your code against the newest versions.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top