很难将JMS消息作为文本播放



我正在使用QueueBrowser来获取,然后通过JMS队列上的消息枚举进行循环。当我尝试将msgs.nextElement()施放为文本message时,Intellij Idea告诉我:

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

我是JM的新手,我不太确定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();
}

JMS中有几种不同类型的消息。您正在尝试读取基本包含字符串的TextMessage,但是您正在阅读的消息实际上是一个包含Java对象的ObjectMessage。您应该检查该消息是使用instanceof TextMessage的短信,并且如果它是别的或抛出异常的消息。

weblogic.jms.common.ObjectMessageImpl只是WebLogic的实现。

最新更新