【问题标题】:Java Component in Mule does not use project's UTF-8 encodingMule 中的 Java 组件不使用项目的 UTF-8 编码
【发布时间】:2016-03-08 20:43:23
【问题描述】:

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

  1. 在Java 组件之前和之后设置MULE_ENCODING=UTF-8,既作为出站属性又作为调用属性。
  2. 在 mule 表达式中设置消息的编码,但失败 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"/>
    

我不确定还有什么方法可以确保来自 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


【解决方案1】:

在你的 java 组件之后尝试&lt;object-to-string-transformer encoding="..." /&gt;

【讨论】:

    【解决方案2】:

    我也遇到了编码问题。它与您的情况完全相似,但我采取了这一行动,它对我有用。 (使用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"/>
    

    我在消息进入我的流程时使用它。

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

    【讨论】:

      【解决方案3】:

      您如何阅读 RSS 提要?如果它正在使用端点,请尝试为该端点设置“编码”属性?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-10-25
        • 2015-03-23
        • 2011-11-28
        • 2010-10-26
        • 1970-01-01
        相关资源
        最近更新 更多