java - 作为字节数组而不是字符串接收的 MQ 消息

标签 java jms ibm-mq

我正在使用 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/

相关文章:

java - hibernate 的问题 - 持久上下文

java - 在 Apache Tomcat 服务器 7.0 中部署 PHP 和 Java EE 应用程序

java - 使用子字符串搜索过滤 ListView

jms - IBM MQSeries 中 org.hornetq.api.core.client.ClientMessage.setBodyInputStream 的等价物

java - 使用 MySql v5.7 通过 WebSphere MQ V7.5 Classes for Java 配置和使用 XA 事务

java - 使用带有 dynamicreports 的现有图像

java - 在 java 客户端中设置 MQ header

java - JMS 队列拆分。企业整合。 Apache Camel

java - 在 JBoss EAP 7 上部署 JMS 应用程序时出错

ibm-mq - 用于 Apple 芯片的 IBM MQ