Mule流引用组件在传递json

时间:2016-06-08 10:33:36

标签: mule mule-studio mule-component

我有两个流程一个接收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==&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请求 -

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

我应该如何检索从其他流到当前流的json响应。

2 个答案:

答案 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()&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] 1}}

所以完整的代码如下: -

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