Много входов в один выход с помощью Mule DataMapper
Друзья,
У меня есть два входа, A и B, оба JSON. Мне нужно сгенерировать с DataMapper, один выход (пользовательский) также в формате JSON.
Пример:
Мой вход A:
{
"name": "John Doe",
"age": "40"
}
Мой вход B:
{
"country": "Brazil"
"city": "Rio de Janeiro"
}
Мой пользовательский вывод:
{
"customerName": "John Doe",
"customerAge": "40",
"customerCountry": "Brazil",
"customerCity": "Rio de Janeiro"
}
Он может генерировать этот вывод с помощью Mule DataMapper? Как?
В то время я знаю, использовать только один вход с DataMapper.
3 ответа
Немного похоже с предыдущим ответом: вам нужно взять один вход в качестве полезной нагрузки, а другой - в качестве переменной.
Ниже приведена реализация с использованием DataMapper (не DataWeave / Transform Message)
XML:
<flow name="genericFlow">
<http:listener config-ref="HTTP_Listener_Configuration" path="/dm" doc:name="HTTP" allowedMethods="POST"/>
<set-variable variableName="inputB"
value="#['{"country": "Brazil", "city": "Rio de Janeiro"}']" mimeType="application/json"
doc:name="Input B" />
<data-mapper:transform config-ref="JSON_To_JSON" doc:name="JSON To JSON">
<data-mapper:input-arguments>
<data-mapper:input-argument key="inputBjson">#[new org.json.JSONObject(flowVars.inputB)]</data-mapper:input-argument>
</data-mapper:input-arguments>
</data-mapper:transform>
<echo-component doc:name="Echo" />
</flow>
GRF:
...
<Dictionary>
<Entry id="DictionaryEntry0" input="true" name="inputPayload" output="false" type="object"/>
<Entry id="DictionaryEntry1" input="false" name="outputPayload" output="true" type="object"/>
<Entry dictval.__javaType="org.json.JSONObject" id="DictionaryEntry2" input="true" name="inputBjson" output="false" type="object"/>
</Dictionary>
...
<attr name="melScript"><![CDATA[//MEL
//START -> DO NOT REMOVE
output.__id = input.__id;
//END -> DO NOT REMOVE
output.customerName = input.name;
output.customerAge = input.age;
output.customerCountry = inputArguments.inputBjson.getString("country");
output.customerCity = inputArguments.inputBjson.getString("city");]]></attr>
Примечания: вход B зарегистрирован в DataMapper как аргумент ввода с типом = объект (только MEL), и его класс: org.json.JSONObject
Один вход дает его в качестве полезной нагрузки, а другой использует свойства сообщения и сохраняет вторые входные значения как переменную. Теперь в преобразователе данных используйте переменную в поле входного аргумента и отобразите ее. Просто!! Надеюсь, поможет.
Вам нужно взять один из входных данных в качестве полезной нагрузки, а другой - в качестве переменной.
Моя полезная нагрузка была
{ "name": "John Doe", "age": "40" }
Моя переменная была
{"страна": "Бразилия" "город": "Рио-де-Жанейро"}
Пожалуйста, найдите ниже образец, который я тестировал и работает.
<flow name="combineFlow">
<http:listener config-ref="HTTP_Listener_Configuration"
path="/testings" doc:name="HTTP" />
<logger message="Coming here " level="INFO" doc:name="Logger" />
<set-variable variableName="mypayload"
value="{"country": "Brazil","city": "Rio de Janeiro"}"
doc:name="Variable" mimeType="application/json" />
<logger level="INFO" doc:name="Logger" />
<dw:transform-message doc:name="Transform Message">
<dw:set-payload><![CDATA[%dw 1.0
%output application/json
---
{
"customerName": payload.name,
"customerAge": payload.age,
"customerCountry": flowVars.mypayload.country,
"customerCity": flowVars.mypayload.city
}]]></dw:set-payload>
</dw:transform-message>
</flow>
Надеюсь это поможет