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

Spe*_*nce 8 java xml serialization jms character-encoding

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

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

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

  • TextMessage:许多队列实现中都有API用于轻松发送XML.我也明白,消息附有"编码"信息.但是我冒险将消息编码(并将其编写的前导码)编码为一种格式并将其作为另一种格式接收.

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

Luk*_*der 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");
Run Code Online (Sandbox Code Playgroud)