将XML发送到JMS时​​,我应该使用TextMessage或BytesMessage

时间:2012-06-01 11:57:42

标签: java xml serialization character-encoding jms

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

我正在尝试理解何时将XML发送到JMS系统(例如ActiveMQ),是否应该使用

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

  • TextMessage:许多队列实现中都有API可以轻松发送XML。我也明白,消息附有“编码”信息。但是我冒险将信息编码(并将其编写为序言)以一种格式编码并将其作为另一种格式接收。

有没有人有明确的答案,或至少有一些理由为什么你会选择一个而不是另一个?

1 个答案:

答案 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");