Mule - возвращение в JSON и XML во время выполнения ..? - PullRequest
1 голос
/ 14 ноября 2011

В Mule в настоящее время я использую собственный преобразователь "JavaObjectToJSON" (в качестве преобразователя ответа) для преобразования POJO в JSON, т.е. мой компонентный класс возвращает объект Java ( List или HashMap ) и этот преобразователь преобразует его в JSON и возвращает результат.

Мой код похож на:

<flow name="OfferingDetails">
    <http:inbound-endpoint address="http://localhost:1212/jcore/offering/details" 
transformer-refs="HttpParams" responseTransformer-refs="JavaObjectToJSON">  
    </http:inbound-endpoint>

    <component class="main.java.com.raman.jcore.OfferingDetails"/>
</flow>

Теперь предположим, что я хочу вернуть результат в XML. Для этого я могу использовать другой пользовательский преобразователь "JavaObjectToXML", который может сделать то же самое аналогичным образом.


Но мой вопрос, как я могу сделать это динамически . Например, если я предоставлю клиенту выбор того, как ему нужны данные. И он может нажать на ссылку, как

  • "http://localhost:1212/jcore/offering/details/?response=json"
  • "http://localhost:1212/jcore/offering/details.json/"

ИЛИ

  • "http://localhost:1212/jcore/offering/details/?response=xml"
  • "http://localhost:1212/jcore/offering/details.xml/

И поэтому я смогу изменить трансформатор на время выполнения и вернуть результат в соответствующей записи. Есть ли способ сделать это .. ??

или кроме изменения трансформатора, любой другой обходной путь ??

Пожалуйста, помогите мне. Я застрял в этом.

1 Ответ

1 голос
/ 15 ноября 2011

Используйте процессор сообщений о маршрутизации для выбора правильного трансформатора в фазе ответа.

Что-то в строке:

<flow name="OfferingDetails">
  <http:inbound-endpoint address="http://localhost:1212/jcore/offering/details"
                         transformer-refs="HttpParams" />  

  <component class="main.java.com.raman.jcore.OfferingDetails"/>

  <response>
    <choice>
      <when expression="message.getInboundProperty('http.request.path').contains('json')" evaluator="groovy">
        <transformer ref="JavaObjectToJSON" />
      </when>
      <otherwise>
        <transformer ref="JavaObjectToXML" />
      </otherwise>
    </choice>
  <response>
</flow>
...