我正在使用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"}
有人可以帮忙吗?
答案 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" />
希望这有帮助