我正在使用 Websphere MQ 并使用 Spring 集成和 jms 适配器从队列中读取消息。
当我手动将消息添加到队列时,应用程序正在读取它们并将数据作为 String
读取,一切都很好。
但是,当外部方将消息添加到队列时,应用程序将它们作为字节数组读取,然后抛出此异常:
Caused by: java.lang.ClassCastException: [B cannot be cast to java.lang.String
我在 MQExplorer 中看到的消息是一样的。
虽然我注意到一个 Format 列,其中作为字符串处理的消息具有值 MQSTR
而作为 Byte[] 处理的消息在其中没有任何内容。这可能有关系吗?如果是这样,有什么想法可以设置消息的“格式”吗?
有谁知道是什么决定了消息的负载内容类型,这样我至少可以重现问题?
最佳答案
我以前遇到过这种情况。外部方可能没有使用 JMS,但可能正在使用 MQI 或用于 Java 的 Websphere MQ 类。
这意味着您可能会以 ByteMessages 的形式接收消息。
This article解释了 MQ 消息到 JMS 消息的转换。
我会与外部方交谈并询问他们如何发送消息。他们可能必须向您提供他们正在设置的 MQMD 属性的详细信息。您可能必须在 MessageListener 中检索这些。
关于java - 作为字节数组而不是字符串接收的 MQ 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14364003/