使用Mule DataMapper对一个输出进行了许多输入

时间:2016-01-13 18:38:31

标签: mule mule-studio mule-el

我有两个输入,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 个答案:

答案 0 :(得分:0)

您需要将其中一个输入作为有效负载,将另一个作为变量。

我的有效负载

{  “名字”:“John Doe”,  “年龄”:“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>

希望这有帮助

答案 1 :(得分:0)

与之前的回答略有相似:您需要将一个输入作为有效负载,将另一个作为变量。

以下是使用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,类型为= Object(仅限MEL),其类为:org.json.JSONObject

答案 2 :(得分:0)

一个输入将其作为有效负载,另一个使用消息属性并将第二个输入值存储为变量。现在数据映射器内部使用输入参数字段中的变量并映射它。简单!希望它有所帮助。