E 02/07/19-07:51:49.358 [-5] JMSListener exception : java.lang.ClassCastException: com.ibm.jms.JMSMessage cannot be cast to javax.jms.TextMessage
这是一个棘手的问题。我们将xml消息放入队列中,而我们的代码完全没问题。第二天,我们将另一个xml消息放入相同的队列中,并且相同的代码引发了此错误。
我正在寻找有关如何从实际发生的事情中获取更多信息的建议,或者是否有人在JMS中遇到这样的间歇性类强制转换异常。
答案 0 :(得分:1)
请注意,并非所有“ XML”消息都作为JMS TextMessage发送。我碰到过同样的事情。一些应用程序将决定将XML内容作为JMS BytesMessage发送给您(并将文本放入字节数组主体中)。因此,请确保您的发送确实是在向您发送TextMessage。
一种看到这种情况的方法是停止您的使用者,并使用MQExplorer查看排队的消息:如果命名属性mcd.Msd是作为正确的MQ JMS TextMessage发送的,则其应显示jms_text。如果从非JMS应用程序接收到数据,则MQ格式很重要。如果格式为MQFMT_STRING,则将消息作为JMS TextMessage接收。否则,它将作为JMS BytesMessage接收!
因此,要么更改发布者以将format的值设置为MQFMT_STRING,要么更改您的消费者应用程序以删除对TextMessage的强制转换,而是也接受BytesMessages并从正文的字节数组构造文本。