我在网络上发现了一些非常矛盾的信息,并且我认为每个不同的JMS提供程序也可能会改变答案。

我试图了解将XML发送到JMS系统(例如ActiveMQ)时是否应该使用

  • BytesMessage:我可以保证XML正确序列化,并且序言将与实际编码匹配。此外,我可以确保客户端将能够正确获取原始表示。
  • TextMessage:许多队列实现中都有一些API,可以轻松发送XML。我也了解到消息中附加了“编码”信息。但是我冒着用一种格式编码消息(并写其前导)并以另一种格式接收消息的风险。

  • 有没有人有一个明确的答案,或者至少有一些原因使您选择一个而不是另一个?

    最佳答案

    我同意jos'对您的问题的评论。首先,您应该选择最能表达内容语义的消息类型。阅读 TextMessage Javadoc,我会这样做:



    因此,如果您确实遇到了短信编码问题,那么客户端/服务器端可能存在一些错误配置。但这不应该成为滥用其他主要不是用于文本传输的消息类型的动机,例如 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");
    

    08-17 15:07