简体   繁体   English

传递json时,ule子流参考组件抛出TransformerMessagingException

[英]Mule Flow Reference Component throwing TransformerMessagingException while passing json

I have two flow one receive the xml payload and another json. 我有两个流程,一个流程接收xml负载,另一个流程接收json。 I am routing the xml call to json flow using mule flow reference component after converting the xml to json payload. 在将xml转换为json负载后,我使用m子流参考组件将xml调用路由到json流程。 and second flow returns the json payload that i need to convert back to xml and reply to client. 第二个流程返回我需要转换回xml并回复客户端的json有效负载。

My mule flow reference is throwing TransformerMsgException while receiving the json response from second flow. 我的m子流参考在收到第二个流的json响应时抛出TransformerMsgException。

Failed to transform from "json" to "java.lang.String" (org.mule.api.transformer.TransformerException). Message payload is of type: String

Here are the code for your reference - 这是供您参考的代码-

 <flow name="post:/chkdb:application/json:chkd-config">
         <logger message="========json payload==&gt;&gt;&gt;&gt;====  #[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()&gt;0]">
                 <set-payload value="{&quot;indicator&quot;:&quot;True&quot;}" mimeType="application/json" doc:name="Set Payload"/>
             </when>
             <otherwise>
                 <set-payload value="{&quot;indicator&quot;:&quot;False&quot;}" 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 Request - XML请求-

<ggg>DeJmp03bkqALlRFYmgu4+A==</ggg>

How i should retrieve the json response from other flow to current flow. 我应该如何从其他流程到当前流程检索json响应。

There is something missing here 这里缺少一些东西

  • First flow name: post:/chkdb:application/json: chkdbapi-config 第一个流程名称:post:/ chkdb:application / json: chkdbapi-config

  • Second flow name: post:/chkdb:application/xml:chkdbapi-config 第二个流程名称:post:/ chkdb:application / xml:chkdbapi-config

  • Flow ref in second flow: post:/chkdb:application/json: chkdb-config 第二个流中的流引用:post:/ chkdb:application / json: chkdb-config

You are not referencing First flow. 您没有引用“第一流程”。

So from your flow posted I can find few issues as follows :- 因此,从您发布的流程中,我发现一些问题如下:-
1. You are using where is the flow post:/chkdb:application/json:chkdb-config doesn't exits and it should be post:/chkdb:application/json:chkdbapi-config instead 1.您正在使用流程post:/ chkdb:application / json:chkdb-config不退出的地方,而应该是post:/ chkdb:application / json:chkdbapi-config
2. Right now in the flow you are using <when expression="#[message.payload.size()&gt;0]"> where as the message payload is in String format right now. 2.现在,在流中,您正在使用<when expression="#[message.payload.size()&gt;0]"> ,其中消息有效负载现在是String格式。
So, you can either use <when expression="#[message.payload.length()&gt;0]"> , using length() instead of size() or put a <json:json-to-object-transformer returnClass="java.lang.Object" doc:name="JSON to Object"/> before choice if you use #[message.payload.size()&gt;0] 因此,您可以使用<when expression="#[message.payload.length()&gt;0]"> ,使用length()而不是size()或放置<json:json-to-object-transformer returnClass="java.lang.Object" doc:name="JSON to Object"/>如果您使用#[message.payload.size()&gt;0]则在选择之前<json:json-to-object-transformer returnClass="java.lang.Object" doc:name="JSON to Object"/>

So the full code will be something as follows :- 因此完整的代码如下:

 <flow name="post:/chkdb:application/json:chkdbapi-config">
          <logger message="========json payload==&gt;&gt;&gt;&gt;====  #[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()&gt;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()&gt;0]">
                  <set-payload value="{&quot;indicator&quot;:&quot;True&quot;}" mimeType="application/json" doc:name="Set Payload"/>
              </when>
              <otherwise>
                  <set-payload value="{&quot;indicator&quot;:&quot;False&quot;}" 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>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM