Domanda
Sono stati bloccati con questo problema per un paio d'ore Ora, chiunque tutte le idee?
java.lang.NoSuchMethodError:. Com.ibm.mq.MQException (Ljava / lang / String; Ljava / lang / String; II) V a com.ibm.msg.client.wmq.common.internal.Reason.createException (Reason.java:223) a com.ibm.msg.client.wmq.internal.WMQMessageConsumer.checkJmqiCallSuccess (WMQMessageConsumer.java:123) a com.ibm.msg.client.wmq.internal.WMQConsumerShadow.getMsg (WMQConsumerShadow.java:1198) a com.ibm.msg.client.wmq.internal.WMQSyncConsumerShadow.receiveInternal (WMQSyncConsumerShadow.java:233) a com.ibm.msg.client.wmq.internal.WMQConsumerShadow.receive (WMQConsumerShadow.java:922) a com.ibm.msg.client.wmq.internal.WMQMessageConsumer.receive (WMQMessageConsumer.java:450) a com.ibm.msg.client.jms.internal.JmsMessageConsumerImpl.receiveInboundMessage (JmsMessageConsumerImpl.java:742) a com.ibm.msg.client.jms.internal.JmsMessageConsumerImpl.receive (JmsMessageConsumerImpl.java:423) a com.ibm.mq.jms.MQMessageConsumer.receive (MQMessageConsumer.java:258)
sto ottenendo questo errore quando ho messo il messaggio utilizzando MQ librerie native e ho letto utilizzando JMS API. JMS lettura fallisce gettare l'eccezione di cui sopra. Sono anche utilizzando Selector JMS che sembra essere la causa del problema. con il selettore di tutto funziona bene. TIA.
Soluzione
Finalmente sono riuscito a risolvere questo, tutto aveva a che fare con il modo si crea il selettore. La differenza è che di MQ API hanno correlazione id come byte array in cui JMS prende come una stringa. A causa di questo il selettore è in grado di selezionare il messaggio e stava gettando l'errore distaccati. L'errore non è affatto di debug amichevole quindi dovuto fare un sacco di tentativi ed errori. In ogni modo ora questo funziona così sono felice. Di seguito è riportato il codice di cambiamento ho dovuto fare per questo:
// String selettore = "JMSCorrelationID = '" + corleationID + "'"; prima della modifica
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, selettore);
Di cui il codice dalla documentazione IBM.
Altri suggerimenti
Hai avuto la versione sbagliata di librerie MQ. Provare a eseguire il codice contro le versioni più recenti.