我有两个流程一个接收xml有效负载和另一个json。在将xml转换为json有效负载后,我使用mule流引用组件将xml调用路由到json流。第二个流返回我需要转换回xml并回复客户端的json有效负载。
我的mule流引用在从第二个流接收json响应时抛出TransformerMsgException。
Failed to transform from "json" to "java.lang.String" (org.mule.api.transformer.TransformerException). Message payload is of type: String
以下是供您参考的代码 -
<flow name="post:/chkdb:application/json:chkd-config">
<logger message="========json payload==>>>>==== #[message.payload]" level="INFO" doc:name="Logger"/>
<set-variable variableName="GGG_Number" value="#[json:ggg]" doc:name="Variable"/>
<!-- db call returns the payload-->
<choice doc:name="Choice">
<when expression="#[message.payload.size()>0]">
<set-payload value="{"indicator":"True"}" mimeType="application/json" doc:name="Set Payload"/>
</when>
<otherwise>
<set-payload value="{"indicator":"False"}" mimeType="application/json" doc:name="Set Payload"/>
</otherwise>
</choice>
<logger message="=========after producing json output=======" level="INFO" doc:name="Logger"/>
</flow>
<flow name="post:/chkdb:application/xml:chkdb-config">
<logger message="========= xml payload======== #[message.payload]" level="INFO" doc:name="Logger"/>
<json:xml-to-json-transformer mimeType="application/json" doc:name="XML to JSON"/>
<flow-ref name="post:/chkdb:application/json:chkdb-config" doc:name="post:/chkdb:application/json:chkdbapi-config"/> <!-- Getting exception here -->
<logger message=" after subflow call ==== #[message.payload]" level="INFO" doc:name="Logger"/>
<json:json-to-xml-transformer mimeType="application/xml" doc:name="JSON to XML"/>
<logger message="after json to xml conversion" level="INFO" doc:name="Logger"/>
</flow>
XML请求 -
<ggg>DeJmp03bkqALlRFYmgu4+A==</ggg>
我应该如何检索从其他流到当前流的json响应。
答案 0 :(得分:0)
这里缺少一些东西
第一个流程名称:post:/ chkdb:application / json: chkdbapi-config
第二个流名称:post:/ chkdb:application / xml:chkdbapi-config
第二个流程中的流程参考:post:/ chkdb:application / json: chkdb-config
您没有引用第一流程。
答案 1 :(得分:0)
所以从您发布的流程中我可以发现以下几个问题: -
1.您正在使用的流程在哪里:/ chkdb:application / json:chkdb-config不会退出,它应该是post:/ chkdb:application / json:chkdbapi-config而不是
2.现在正在使用<when expression="#[message.payload.size()>0]">
的流程中,因为消息有效负载现在是字符串格式
因此,您可以使用<when expression="#[message.payload.length()>0]">
,使用 length()而不是 size(),或者在使用{<json:json-to-object-transformer returnClass="java.lang.Object" doc:name="JSON to Object"/>
之前使用#[message.payload.size()>0]
1}}
所以完整的代码如下: -
<flow name="post:/chkdb:application/json:chkdbapi-config">
<logger message="========json payload==>>>>==== #[message.payload]" level="INFO" doc:name="Logger"/>
<!-- <json:json-to-object-transformer returnClass="java.lang.Object" doc:name="JSON to Object"/> --> <!-- incase you use #[message.payload.size()>0] in your choice -->
<!-- db call returns the payload-->
<set-variable variableName="GGG_Number" value="#[json:ggg]" doc:name="Variable"/>
<choice doc:name="Choice">
<when expression="#[message.payload.length()>0]">
<set-payload value="{"indicator":"True"}" mimeType="application/json" doc:name="Set Payload"/>
</when>
<otherwise>
<set-payload value="{"indicator":"False"}" mimeType="application/json" doc:name="Set Payload"/>
</otherwise>
</choice>
<logger message="=========after producing json output=======" level="INFO" doc:name="Logger"/>
</flow>
<flow name="post:/chkdb:application/xml:chkdbapi-config">
<logger message="========= xml payload======== #[message.payload]" level="INFO" doc:name="Logger"/>
<json:xml-to-json-transformer mimeType="application/json" doc:name="XML to JSON"/>
<flow-ref name="post:/chkdb:application/json:chkdbapi-config" doc:name="post:/chkdb:application/json:chkdbapi-config"/> <!-- Getting exception here -->
<logger message=" after subflow call ==== #[message.payload]" level="INFO" doc:name="Logger"/>
<json:json-to-xml-transformer mimeType="application/xml" doc:name="JSON to XML"/>
<logger message="after json to xml conversion" level="INFO" doc:name="Logger"/>
</flow>