java - 将 JMS 消息转换为 TextMessage 时出现问题

标签 java intellij-idea jms weblogic

我使用 QueueBrowser 获取并循环访问 JMS 队列上的消息枚举。当我尝试将 msgs.nextElement() 转换为 TextMessage 时,IntelliJ IDEA 告诉我:

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

我对 JMS 很陌生,不太确定 weblogic.jms.common.ObjectMessageImpl 是什么。将 msgs.nextElement() 转换为 Message 类型似乎工作正常。我的代码如下。

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 对 ObjectMessage 的实现。

关于java - 将 JMS 消息转换为 TextMessage 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44804033/

相关文章:

java - loadClass 抛出由 ClassNotFoundException 引起的 NoClassDefFoundError

java - JNativehook 不捕获密码

maven - Intellij 试图将 pom.xml 视为 jar 文件

java - 确保代理持有消息,直到至少一个消费者得到它

java - 我在哪里可以找到这个 jar : commons-csv 0. 1-524170

java - 如何在 "n"天后删除 firebase 数据

intellij-idea - 使用 Gradle 在 IntelliJ 中跳过测试

java - 如何在 IntelliJ IDEA 中忽略 "navigate to class"上的某些包

java - Camel JMS 请求回复问题与远程 MessageListener

jms - Apache Kafka 和 JMS 之间的连接