【发布时间】:2016-03-08 20:43:23
【问题描述】:
我在 Mule 中有一个返回字符串的 java 组件。当我从 java 组件中打印该字符串时,它在控制台中读取为 UTF-8 就好了。但是,当我将其作为有效负载返回时,后续记录器和所有下游组件将无法再读取 UTF-8 字符。我已经确认我的项目的编码设置为“UTF-8”。我也:
- 在Java 组件之前和之后设置
MULE_ENCODING=UTF-8,既作为出站属性又作为调用属性。 - 在 mule 表达式中设置消息的编码,但失败
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 组件/转换器的有效负载不被解释或转换为另一种编码...
输出应为:“杰出的新环境科学家”
当前输出的记录器是“杰出新环境科学家”。例如,我通过将 encoding=UTF-8 添加到任何 VM 端点来更正此流程的其他部分。我还确认这可以在流程中其他地方的记录器中正确打印。
从 java 组件引用的 java 类和后续的 mule logger 中返回 String 后似乎发生了一些事情......
【问题讨论】:
-
后续记录器打印什么?
-
输出为“杰出新环境科学家”。我通过将 encoding=UTF-8 添加到任何 VM 端点,在流程的其他部分更正了这一点。我还确认这可以在流程中其他地方的记录器中正确打印。
-
如何将 java 组件的内容推送到 vm 设置编码为 UTF-8,如您所述,然后尝试访问那里。想知道这是否有效?
-
“杰出新环境科学家”这个字符串是如何产生的?
-
它是从流程早期的 RSS 提要中检索到的。 Feed 上的编码是 UTF-8。
标签: mule mule-component mule-el