Много входов в один выход с помощью 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="#['{&quot;country&quot;: &quot;Brazil&quot;, &quot;city&quot;: &quot;Rio de Janeiro&quot;}']" 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="{&quot;country&quot;: &quot;Brazil&quot;,&quot;city&quot;: &quot;Rio de Janeiro&quot;}"
        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>

Надеюсь это поможет

Другие вопросы по тегам