我有两个流,一个接收xml有效负载,另一个接收json。在将 xml 转换为 json 有效负载后,我正在使用骡子流引用组件将 xml 调用路由到 json 流。第二个流返回我需要转换回 XML 并回复客户端的 JSON 有效负载。
我的骡子流引用在接收来自第二个流的 json 响应时抛出转换器 MsgException。
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 响应。
这里缺少一些东西
-
第一个流名称:post:/chkdb:application/json:chkdbapi-config
-
第二个流名称:post:/chkdb:application/xml:chkdbapi-config
第二个流中的流引用:post:/chkdb: application/json:chkdb-config
您没有引用第一个流。
从您发布的流程中,我可以找到以下几个问题:-
1. 你正在使用哪里是流 post:/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(),或者如果您使用 #[message.payload.size()>0]
,则可以在选择之前加上<json:json-to-object-transformer returnClass="java.lang.Object" doc:name="JSON to Object"/>
所以完整的代码将是如下:-
<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>