2017-06-28 2 views
0

Ich verwende einen QueueBrowser, um eine Aufzählung von Nachrichten in einer JMS-Warteschlange abzurufen und anschließend zu durchlaufen. Wenn ich versuche, msgs.nextElement() als Textmessage zu werfen, sagt mir, IntelliJ IDEA:Problem beim Umwandeln von JMS-Nachricht als TextMessage

java.lang.ClassCastException: weblogic.jms.common.ObjectMessageImpl cannot be cast to javax.jms.TextMessage 

Ich bin sehr neu für JMS und ich bin nicht ganz sicher, was weblogic.jms.common.ObjectMessageImpl ist. Casting msgs.nextElement(), um Nachricht eingeben scheint gut zu funktionieren. Mein Code ist unten.

private void readQueueMessage() throws JMSException { 
    int counter = 0; 
    System.out.println("Starting the subscriber"); 
    QueueBrowser queueBrowser = queueSession.createBrowser(queue); 
    Enumeration msgs = queueBrowser.getEnumeration(); 
    //queueConnection.start(); 
    System.out.println("Queue started"); 
    if (!msgs.hasMoreElements()) { 
     System.out.println("No messages in queue"); 
    } else { 
     while (msgs.hasMoreElements()) { 
      System.out.println(">>> message count: " + ++counter); 

      Message message = (Message)msgs.nextElement(); 
      System.out.println("MessageID: " + message.getJMSMessageID() + "\tPriority: " + message.getJMSPriority() + "\tDeliveryMode: " + message.getJMSDeliveryMode()); 
      System.out.println("Timestamp: " + message.getJMSTimestamp() + "\tJMSDestination: " + message.getJMSDestination() + "\tReplyTo: " + message.getJMSReplyTo()); 
      System.out.println("Data: " + ((TextMessage)message).getText()); 

      if (counter >= 3) break; 
     } 
    } 

    System.out.println("stopping the queue"); 
    queueConnection.stop(); 
} 
+0

Was ist die Klasse der Nachrichten, die Sie senden? es scheint, dass Sie eine 'TextMessage' erwarten, aber Sie bekommen stattdessen etwas anderes. – yeedle

Antwort

1

Es gibt verschiedene Arten von Nachrichten in JMS. Sie versuchen, eine TextMessage zu lesen, die im Grunde eine Zeichenfolge enthält, aber die Nachricht, die Sie gerade lesen, ist eine ObjectMessage, die ein Java-Objekt enthält. Sie sollten überprüfen, ob es sich bei der Nachricht um eine Textnachricht handelt, die instanceof TextMessage verwendet, und sie entweder ignorieren, wenn es sich um eine andere Nachricht handelt, oder eine Ausnahme auslösen.

Die Klasse weblogic.jms.common.ObjectMessageImpl ist einfach die WebLogic-Implementierung von ObjectMessage.

Verwandte Themen