Java 向JMS发送XML时,我应该使用TextMessage还是ByteMessage
我在web上发现了一些非常矛盾的信息,我认为每个不同的JMS提供者也可能会改变答案 我试图理解在将XML发送到JMS系统(例如ActiveMQ)时是否应该使用Java 向JMS发送XML时,我应该使用TextMessage还是ByteMessage,java,xml,serialization,character-encoding,jms,Java,Xml,Serialization,Character Encoding,Jms,我在web上发现了一些非常矛盾的信息,我认为每个不同的JMS提供者也可能会改变答案 我试图理解在将XML发送到JMS系统(例如ActiveMQ)时是否应该使用 BytesMessage:我可以保证XML被正确序列化,并且前导码将匹配实际编码。此外,我可以确保客户机能够正确获取原始表示 TextMessage:许多队列实现中都有API,可以轻松发送XML。我还了解到,邮件附带有“编码”信息。但我冒着用一种格式编码信息(并编写其前言)并将其作为另一种格式接收的风险 有没有人有明确的答案,或者至少
- BytesMessage:我可以保证XML被正确序列化,并且前导码将匹配实际编码。此外,我可以确保客户机能够正确获取原始表示
- TextMessage:许多队列实现中都有API,可以轻松发送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");
没有明确的答案,抱歉,伙计。我的2cts:XML是一种文本格式,因此,请使用TextMessage。如果您要发送二进制数据,比如zip或jpg,-然后-使用BytesMessage。让东西自己有意义(没有文档)。它让(开发人员/测试人员/维护人员)的生活更轻松。试着为一个防御项目工作,并告诉你的经理“我们不会为了让它更轻松而记录它…”。我还是明白你的意思。Base64编码的UTF8并不太糟糕,不必求助于MTOM.True之类的东西,但是我在.Net中使用的库将在给定数据流的情况下查找字节顺序标记并正确识别编码。另外,我的xml有序言。但我听到的是,陪审团已经出局了。有趣的是(我目前正在处理一个类似的类型问题)——在Java8中,代码片段可以工作:data1=”[B@3d4eac69“和data2=“源文本”,这是原始文本。