0
votes

I have two flow one receive the xml payload and another json. I am routing the xml call to json flow using mule flow reference component after converting the xml to json payload. and second flow returns the json payload that i need to convert back to xml and reply to client.

My mule flow reference is throwing TransformerMsgException while receiving the json response from second flow.

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 -

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

How i should retrieve the json response from other flow to current flow.

2

2 Answers

0
votes

There is something missing here

  • First flow name: post:/chkdb:application/json:chkdbapi-config

  • Second flow name: post:/chkdb:application/xml:chkdbapi-config

  • Flow ref in second flow: post:/chkdb:application/json:chkdb-config

You are not referencing First flow.

0
votes

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
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.
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]

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>