java无法将JMS消息转换为TextMessage
我正在使用QueueBrowser获取JMS队列上的消息枚举,然后在其中循环。当我试图将msgs.nextElement()
转换为文本消息时,IntelliJ IDEA告诉我:
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();
}
# 1 楼答案
JMS中有几种不同类型的消息。您正在尝试读取一个基本上包含字符串的
TextMessage
,但您正在读取的消息实际上是一个包含Java对象的ObjectMessage
。您应该使用instanceof TextMessage
检查消息是否是文本消息,如果是其他内容,则忽略它,或者引发异常类
weblogic.jms.common.ObjectMessageImpl
只是WebLogic对ObjectMessage的实现