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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top