【问题标题】:Mule geting the payload is not giving the exact string for Special characters such as Ø, €, @获取有效负载的骡子没有给出特殊字符的确切字符串,例如 Ø、€、@
【发布时间】:2013-04-18 06:37:53
【问题描述】:

我陷入了以下场景并试图找出确切的方法。

Mule 正在从 MQ 获取消息,而我从 Mule 有效负载中以字节或字符串的形式获取这些消息,它没有给出窄字符的确切字符,实际上它正在为这些字符和其余字符提供乱码消息人设很好。

我尝试使用 UTF-8 编码将有效负载作为字符串获取仍然具有相同的输出。

我正在使用的代码是:

MuleMessage mmsg = eventContext.getMessage();
byte[] rawMsg = mmsg.getPayloadAsBytes();

String rawMsg = mmsg.getPayloadAsString();

String rawMsg = mmsg.getPayloadAsString("UTF-8");

任何解决方法或替代方法都将受到高度赞赏。

【问题讨论】:

    标签: java activemq mule


    【解决方案1】:

    Mule 非常注意有效负载的数据编码,因此发送到 MQ 本身的消息(发布者实际上可能对它们进行了错误编码)或您自己对它们的处理肯定有问题。

    MuleEventMuleMessage 类都有一个 getEncoding() 方法:最好使用它而不是硬编码到特定的编码。

    由于您收到javax.jms.BytesMessages,我建议您使用标准转换器将其转换为字符串,而不是自己做,在您的jms:inbound-endpoint 之后使用以下内容:

    <byte-array-to-string-transformer encoding="..." />
    

    使用为encoding 属性发送JMS 消息的发布者使用的实际编码。

    【讨论】:

    • 谢谢,我尝试使用 getEncoding(),但它不能解决问题。我们从发送方接收 ByteMessage。之间是否真的很重要,如果它的字节消息或文本消息,因为我试图获得这些类型的一些限制但无法弄清楚。
    • 如果您收到BytesMessage,Mule 应该创建带有byte[] 有效负载的消息。您真的需要将此有效负载转换为String 吗?如果没有,请将有效负载保留为byte[],这样就可以了。
    • 是的,david,我们需要将其转换为字符串,因为我们需要处理消息并将其分成一些块......我们使用的是 mule 3.4,以及像我们有 jms 入站和内部复合流这样的示例配置我们有一个路由器类,它实现了可调用并覆盖了 onCall 方法,从第一行开始,我们试图将其转换为字符串......在我检查文档之间,它说我们可以在配置文件中定义编码,我们是没有定义任何东西,我们只是用最少的配置定义 jms 入站。
    • 好的,我已经查看了我的答案,建议您使用 &lt;byte-array-to-string-transformer /&gt; 而不是自己在代码中编写
    • 好的谢谢你..我会尝试同样的,并会更新你..希望这能解决问题......一个小问题,编码属性我们不知道发件人正在使用什么,如果我们只保留 这会很好还是需要知道确切的编码?
    【解决方案2】:

    尝试使用这个表达式:

    #[message.payloadAs(String)]
    

    这将为您提供字符串格式的有效负载,因此您无需使用 byte-array-to-string-transformer。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-29
      • 1970-01-01
      • 1970-01-01
      • 2021-01-21
      • 1970-01-01
      • 1970-01-01
      • 2020-08-26
      相关资源
      最近更新 更多