骡子流引用组件在传递 json 时抛出变压器消息传递异常



我有两个流,一个接收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==&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]">消息有效负载现在为字符串格式。
因此,您可以使用 <when expression="#[message.payload.length()&gt;0]"> ,使用 length() 而不是 size(),或者如果您使用 #[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>

最新更新