我坚持使用下面的方案,并试图弄清楚这样做的确切方法。
Mule从MQ获取消息,而我从Mule有效负载中获取这些消息,无论是字节还是字符串,它都没有给出窄字符的确切字符,实际上这些字符和休息时会出现乱码消息人物很好。
我尝试将有效负载作为字符串使用UTF-8编码仍具有相同的输出。
我正在使用的代码是:
MuleMessage mmsg = eventContext.getMessage();
byte[] rawMsg = mmsg.getPayloadAsBytes();
或
String rawMsg = mmsg.getPayloadAsString();
或
String rawMsg = mmsg.getPayloadAsString("UTF-8");
任何变通方法或替代方案都将受到高度赞赏。
答案 0 :(得分:1)
Mule正在非常关注有效负载的数据编码,因此在发送给MQ本身的消息中(发布者实际上可能会严重编码它们)或者您自己处理它们时,一定有问题。
MuleEvent
和MuleMessage
类都有getEncoding()
方法:最好使用此方法而不是硬编码到特定编码。
由于您收到了javax.jms.BytesMessage
,我建议您使用标准转换器将其转换为字符串而不是自己动手,请在jms:inbound-endpoint
之后使用以下内容:
<byte-array-to-string-transformer encoding="..." />
使用为encoding
属性发送JMS消息的发布者使用的实际编码。
答案 1 :(得分:-1)
尝试使用此表达式:
#[message.payloadAs(String)]
这将为您提供String格式的有效负载,因此您不需要使用字节数组到字符串转换器。