我在网上发现了一些非常矛盾的信息,我认为每个不同的 JMS 提供商也可能会改变答案。
我试图了解将 XML 发送到 JMS 系统(例如 ActiveMQ)时是否应该使用
BytesMessage
:我可以保证 XML 被正确序列化,并且前导码将与实际编码匹配。此外,我可以确定客户将能够正确获得原始表示。
TextMessage
:许多队列实现中都有 API 可以轻松发送 XML。我还了解到消息中附加了“编码”信息。但我冒着用一种格式对消息进行编码(并编写其序言)并以另一种格式接收它的风险。
有人有明确的答案吗,或者至少有一些你选择其中一个而不是另一个的原因?
我同意jos'对你的问题的评论。首先,您应该选择最能表达内容“语义”的消息类型。阅读 TextMessage
Javadoc,我会这样做:此消息类型可用于传输基于文本的消息,包括具有 XML 内容的消息。
因此,如果您确实在短信编码方面遇到问题,那么客户端/服务器端可能存在一些配置错误。但这不应该成为滥用并非主要用于文本传输的不同消息类型的动机,例如
。注意:即使使用
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");