我正在使用Websphere MQ并使用Spring集成和jms适配器从队列中读取消息。
当我手动将消息添加到队列时,应用程序正在读取它们并以String
的形式读取数据,一切都很好。
但是,当外部方向队列添加消息时,应用程序将它们作为字节数组读取,然后抛出此异常:
Caused by: java.lang.ClassCastException: [B cannot be cast to java.lang.String
在MQExplorer中,消息看起来与我相同。
虽然我注意到了一个Format列,其中作为字符串处理的消息的值为MQSTR
,并且正在处理为Byte []的消息中没有任何内容。这有关系吗?如果是这样,任何想法如何设置消息的“格式”?
是否有人知道什么决定了邮件的有效内容类型,这样我至少可以重新创建问题?
答案 0 :(得分:4)
我之前遇到过这种情况。外部方可能没有使用JMS,但可能正在使用Java的MQI或Websphere MQ类。
这意味着您可能正在接收ByteMessages消息。
This article解释了MQ消息到JMS消息的转换。
我会与外部人员交谈并询问他们如何发送他们的消息。他们可能必须向您提供他们正在设置的MQMD属性的详细信息。您可能必须在MessageListener中检索这些内容。
答案 1 :(得分:0)
在本机MQ消息发送方,设置mqmd ["格式"] =' MQSTR'将确保消息以jms_text格式发送,否则默认情况下以字节格式发送。
我使用Pymqi在Python2.7中使用它。