2016-06-08 2 views
0

У меня есть два потока, которые получают полезную нагрузку xml и еще один json. Я направляю вызов xml в поток json, используя ссылочный компонент потока мула после преобразования xml в полезную нагрузку json. и второй поток возвращает полезную нагрузку json, которую мне нужно преобразовать обратно в xml и ответить клиенту.Mule Flow Reference Компонент throwing TransformerMessagingException при передаче json

Ссылка на мой мул бросает TransformerMsgException при получении ответа json от второго потока.

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 от другого потока к текущему потоку.

ответ

0

Существует что-то здесь отсутствует

  • имя Первый поток: сообщение:/chkdb: применение/JSON: chkdbapi-конфигурации

  • имя второго потока: сообщение:/chkdb: приложение/XML: chkdbapi-конфигурации

  • потока исх во втором потоке: сообщение:/chkdb: применение/JSON: chkdb-конфигурации

Вы не ссылаетесь на первый поток.

+0

Я обновил название потока, ранее отредактированное, чтобы удалить оригинальные имена конкретных проектов. – vashishth

+0

Можете ли вы вставить exmple вашего входящего XML? Im не в состоянии воспроизвести вашу ошибку –

+0

DeJmp03bkqALlRFYmgu4 + A == обновленный в вопросе также, спасибо – vashishth

0

Так что с вашего потока размещены я могу найти несколько вопросов следующим образом: -
1. Вы используете где пост потока:/chkdb: применение/JSON: chkdb-конфигурации не завершает работу, и он должен быть пост :/chkdb: application/json: chkdbapi-config вместо
2. Прямо сейчас в потоке вы используете <when expression="#[message.payload.size()&gt;0]">, где в настоящее время полезная нагрузка сообщения находится в формате String.
Таким образом, вы можете использовать либо <when expression="#[message.payload.length()&gt;0]">, используя длину() вместо размера() или поставить <json:json-to-object-transformer returnClass="java.lang.Object" doc:name="JSON to Object"/> перед выбором, если вы используете #[message.payload.size()&gt;0]

Так что полный код будет что-то выглядит следующим образом: -

<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> 
Смежные вопросы