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