2017-06-28 20 views
0

私は、JMSキュー上のメッセージの列挙を取得してループするためにQueueBrowserを使用しています。私はTextMessageのようmsgs.nextElement()をキャストしようとすると、IntelliJ IDEAが私に語った:JMSメッセージをTextMessageとして問題を解決する

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

私はJMSに非常に新しいだと私はweblogic.jms.common.ObjectMessageImplが何であるかはかなりよく分かりません。メッセージを入力するためにmsgs.nextElement()をキャスティングすると正常に動作しているようです。私のコードは以下の通りです。

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

送信しているメッセージのクラスは何ですか?あなたは 'TextMessage'を期待しているようですが、あなたは何か別のものを手に入れています。 – yeedle

答えて

1

JMSにはいくつかの種類のメッセージがあります。あなたは基本的に文字列を含むTextMessageを読もうとしていますが、読んでいるメッセージは実際にはJavaオブジェクトを含むObjectMessageです。メッセージがinstanceof TextMessageを使用するテキストメッセージかどうかを確認し、それが何か他のものであれば無視するか、例外をスローします。

クラスweblogic.jms.common.ObjectMessageImplは、単にWebLogicのObjectMessageの実装です。

関連する問題