友
我有两个输入,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的输入。
答案 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="{"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>
希望这有帮助
答案 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="#['{"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,类型为= Object(仅限MEL),其类为:org.json.JSONObject
答案 2 :(得分:0)
一个输入将其作为有效负载,另一个使用消息属性并将第二个输入值存储为变量。现在数据映射器内部使用输入参数字段中的变量并映射它。简单!希望它有所帮助。