2014-10-08 1 views
0

У меня поток с конечной точкой HTTP, которая получает json-документ. Это должно трансформироваться в другие JSon документа: «преобразование JSON-в-JSON В мул ESB, которая является лучшей практикой сделать это без использования XSLTКак преобразовать документ json-to-json в Mule ESB

Они могли бы поделиться некоторыми примерами

Благодаря вашей поддержку.?..

ответ

1

Кроме DataMapper, которая является особенностью Enterprise, вы можете использовать Expression трансформатор компонент для создания JSON полезной нагрузки.

Итак, когда вы получаете полезную нагрузку JSON после вашего HTTP, вы анализируете JSON с использованием json-to-object-transformer (тип возврата зависит от вашего JSON), сохраняйте значение элементов в переменной и, наконец, используйте Выражение трансформатор создать свой динамический JSON ..

Давайте рассмотрим очень простой пример, пусть ваш JSON будет

{ 
    "name": "Julio Cejas", 
    "id": 37 
} 

Теперь вы хотите преобразовать в следующий JSON, добавив дополнительный элемент,

{ 
    "name": "Julio Cejas", 
    "id": 37, 
    "designation": "Director" 
} 

Таким образом, вы можете преобразовать из одного JSON другого динамически с помощью Expression трансформатора в следующем потоке: -

<flow name="DynamicJSONFlow1" doc:name="DynamicJSONFlow1"> 
     <http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8085" path="test" doc:name="HTTP"/> 
     <json:json-to-object-transformer returnClass="java.lang.Object" doc:name="JSON to Object"/> 
     <set-variable variableName="name" value="#[message.payload.name]" doc:name="Variable"/> 
     <set-variable variableName="id" value="#[message.payload.id]" doc:name="Variable"/> 

     <expression-transformer 
    expression="#[[ 
        'name':flowVars.name, 
        'id':flowVars.id, 
        'designation':'Designation' 
        ] 
     ]" doc:name="Expression"/> 

     <json:object-to-json-transformer doc:name="Object to JSON"/>  
     <logger level="INFO" message="#[message.payload]" doc:name="Logger"/> 
    </flow> 

Вы можете изменить этот поток согласно вашему требованию, и вы можете генерировать JSON, который вам нужен в любом формате очень простым способом

+0

Спасибо вам за поддержку Anirban !!! –

0

Если вы используете корпоративную версию Mule, ответ прост. Используйте DataMapper. Именно это и предназначен DataMapper для преобразования данных. Если вы используете редакцию сообщества, то ответ действительно зависит на сколько вам нужно преобразовать данные.Я начну с преобразования json в java.util.Map.Это упрощает работу. После того, как вы используете его как карту, вы можете использовать MEL exp ressions или написать собственный java-трансформатор для изменения данных в любой формат, который вам нужен (по-прежнему используя карту). Тогда тривиально преобразовать полученную карту обратно в Json.

<flow name="jsonToJson"> 
    <vm:inbound-endpoint exchange-pattern="request-response" path="jsonToJson" doc:name="VM"/> 
    <json:json-to-object-transformer returnClass="java.util.Map" doc:name="JSON to Object"/> 
    <custom-transformer class="com.example.myMapToMapDataTransformer" doc:name="Java"/> 
    <json:object-to-json-transformer doc:name="Object to JSON"/> 
</flow>