在Mule中解析JSON时出错

时间:2016-08-23 13:21:37

标签: mule-studio

我正在使用mule anypoint studio从Mule到另一个系统进行web服务调用。调用很好,我确实看到了从外部系统返回的消息。现在我试图使用JSON字符串传递该webservice调用的输入。该值将记录在我们正在调用的外部系统上。我正在使用Datamapper并在数据映射器配置中选择JSON文件。地图发生时没有任何错误,但是当我调用骡子流时(通过http连接器)。

我在控制台上看到此错误

  

意外的角色(' N'(代码78)):期待双引号   在[来源:java.io.InputStreamReader@687aae57;开始字段名称;   line:1,column:3] ERROR 2016-08-23 18:42:44,405 [WatchDog_0]   org.jetel.graph.runtime.SingleThreadWatchDog:错误详情:   org.jetel.exception.JetelRuntimeException:Component [JSON   READER:JSON_READER0]状态为ERROR。   org.codehaus.jackson.JsonParseException:意外的字符(' N'(代码78)):期待双引号来启动字段名称   根异常堆栈跟踪:   org.codehaus.jackson.JsonParseException:意外的字符(' N'(代码78)):期待双引号来启动字段名称    在[来源:java.io.InputStreamReader    在[来源:java.io.InputStreamReader @

我认为问题出在JSON文件上,但无法找出...我的JSON文件看起来像

{"receiveMessageFromMule":"Invocation Message from Mule"}

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

@Angel,根据错误收到的JSON数据带有不带引号的字段名称(没有双引号,“,对于字段名称)。你需要启用jackson mapper来处理不带引号的字段名称,这可以是通过将JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES添加到ObjectMapper配置来完成。

您可以通过在mule中使用spring注入自定义ObjectMapper来自定义JSON转换器。以下是参考的代码段

    <spring:bean id="jacksonObjectMapper" class="org.codehaus.jackson.map.ObjectMapper" />
    <spring:bean
        class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
        <spring:property name="targetObject" ref="jacksonObjectMapper" />
        <spring:property name="targetMethod" value="configure" />
        <spring:property name="arguments">
            <spring:list>
                <spring:value>ALLOW_UNQUOTED_FIELD_NAMES</spring:value>
                <spring:value>true</spring:value>
            </spring:list>
        </spring:property>
    </spring:bean>

    <json:object-to-json-transformer mapper-ref="jacksonObjectMapper" />

希望这有帮助