10

我在网上发现了一些非常矛盾的信息,我认为每个不同的 JMS 提供者也可能会改变答案。

我试图了解将 XML 发送到 JMS 系统(例如 ActiveMQ)时是否应该使用

  • BytesMessage :我可以保证 XML 被正确序列化,并且序言将与实际编码匹配。此外,我可以确定客户端将能够正确获取原始表示。

  • TextMessage :在许多队列实现中都有用于轻松发送 XML 的 API。我也了解消息附加了“编码”信息。但是我冒着以一种格式编码消息(并将其编写为序言)并将其作为另一种格式接收的风险。

有没有人有明确的答案,或者至少有一些你会选择其中一个的原因?

4

1 回答 1

5

我同意jos对您的问题的评论。首先,您应该选择最能表达内容语义的消息类型。阅读TextMessageJavadoc,我会这样做:

此消息类型可用于传输基于文本的消息,包括具有 XML 内容的消息。

因此,如果您确实在文本消息编码方面遇到问题,那么客户端/服务器端可能存在一些错误配置。但这不应成为滥用主要不是用于文本传输的不同消息类型的动机,例如BytesMessage.

注意:即使使用BytesMessage,您也可能得到错误的编码。想象:

// Send that data through JMS
byte[] data1 = "source text".getBytes("ISO-8859-1");

// Receive the byte stream on the other side. Ooops
String data2 = new String(data1, "UTF-8");
于 2012-06-01T12:54:53.150 回答