繁体   English   中英

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

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

我有两个流程,一个流程接收xml负载,另一个流程接收json。 在将xml转换为json负载后,我使用m子流参考组件将xml调用路由到json流程。 第二个流程返回我需要转换回xml并回复客户端的json有效负载。

我的m子流参考在收到第二个流的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响应。

这里缺少一些东西

  • 第一个流程名称: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()&gt;0]"> ,其中消息有效负载现在是String格式。
因此,您可以使用<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"/>

因此完整的代码如下:

 <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