我在Mule中有一个返回String的java组件。当我从java组件中打印该字符串时,它在控制台中读取为UTF-8就好了。但是,当我将此作为有效负载返回时,后续记录器和所有下游组件将无法再读取UTF-8字符。我已经确认我的项目编码设置被设置为'UTF-8'。我也是:
MULE_ENCODING=UTF-8
,作为出站属性和调用属性。 message.setEncoding('UTF-8')
时出错,说明无法找到方法setEncoding()
在java组件中使用以下内容:
eventContext.getMessage().setPayload(myString);
eventContext.getMessage().setEncoding("UTF-8");
return eventContext.getMessage().getPayload();
使用变换器上的以下配置切换到java变换器而不是组件,明确将编码设置为“UTF-8”。
<custom-transformer encoding="UTF-8"
class="myDomain.myJavaTransformer" doc:name="Java"/>
我不确定还有什么可以确保来自java组件/转换器的有效负载不被解释或转换为另一种编码......
输出应为:“杰出的新环境科学家”
记录器目前输出的是“卓越的新环境科学家”。例如,我已经在流程的其他部分通过向任何VM端点添加encoding = UTF-8来更正此问题。我还确认这可以在流程中其他地方的记录器中正确打印。
从java组件和随后的mule logger引用的java类中返回String之后似乎发生了一些事情......
答案 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'属性吗?