Mule中的Java组件不使用项目的UTF-8编码

时间:2016-03-08 20:43:24

标签: mule mule-component mule-el

我在Mule中有一个返回String的java组件。当我从java组件中打印该字符串时,它在控制台中读取为UTF-8就好了。但是,当我将此作为有效负载返回时,后续记录器和所有下游组件将无法再读取UTF-8字符。我已经确认我的项目编码设置被设置为'UTF-8'。我也是:

  1. 在Java组件之前和之后设置MULE_ENCODING=UTF-8,作为出站属性和调用属性。
  2. 在骡子表达式中设置邮件的编码,但失败message.setEncoding('UTF-8')时出错,说明无法找到方法setEncoding()
  3. 在java组件中使用以下内容:

    eventContext.getMessage().setPayload(myString);
    eventContext.getMessage().setEncoding("UTF-8");
    return  eventContext.getMessage().getPayload(); 
    
  4. 使用变换器上的以下配置切换到java变换器而不是组件,明确将编码设置为“UTF-8”。

    <custom-transformer encoding="UTF-8"
      class="myDomain.myJavaTransformer" doc:name="Java"/>
    
  5. 我不确定还有什么可以确保来自java组件/转换器的有效负载不被解释或转换为另一种编码......

    输出应为:“杰出的​​新环境科学家”

    记录器目前输出的是“卓越的新环境科学家”。例如,我已经在流程的其他部分通过向任何VM端点添加encoding = UTF-8来更正此问题。我还确认这可以在流程中其他地方的记录器中正确打印。

    从java组件和随后的mule logger引用的java类中返回String之后似乎发生了一些事情......

3 个答案:

答案 0 :(得分:1)

在您的java组件

之后立即尝试<object-to-string-transformer encoding="..." />

答案 1 :(得分:1)

我的编码也有问题。 与你的情况完全相似,但我采取了这个行动,它对我有用。 (使用java序列化的数组的字节)

<set-property propertyName="MULE_ENCODING" value="UTF-8" doc:name="Property" />

<byte-array-to-string-transformer encoding="UTF-8" doc:name="Byte Array to String"/>

当消息传到我的流程时,我就用它了。

在包装器中也有属性,你也可以设置它。

答案 2 :(得分:0)

您是如何阅读RSS Feed的?如果它正在使用端点,请尝试为该端点设置'encoding'属性吗?