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.
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.