2017-06-28 1 views
0

J'utilise un QueueBrowser pour obtenir et parcourir une énumération de messages dans une file d'attente JMS. Lorsque je tente de jeter msgs.nextElement() comme TextMessage, IntelliJ IDEA me dit:Problème lors de l'envoi d'un message JMS en tant que TextMessage

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

Je suis très nouveau pour JMS et je ne suis pas tout à fait sûr de ce que weblogic.jms.common.ObjectMessageImpl est. Casting msgs.nextElement() to type Le message semble fonctionner correctement. Mon code est ci-dessous.

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

Quelle est la classe des messages que vous envoyez? il semble que vous vous attendiez à un 'TextMessage' mais vous obtenez autre chose à la place. – yeedle

Répondre

1

Il existe plusieurs types de messages dans JMS. Vous essayez de lire un TextMessage qui contient essentiellement une chaîne, mais le message que vous lisez est en fait un ObjectMessage qui contient un objet Java. Vous devriez vérifier si le message est un message texte en utilisant instanceof TextMessage et soit l'ignorer si c'est quelque chose d'autre ou jeter une exception.

La classe weblogic.jms.common.ObjectMessageImpl est simplement l'implémentation de ObjectMessage par WebLogic.