Mule 有效载荷中的替换值

Mule 有效载荷中的替换值,mule,anypoint-studio,Mule,Anypoint Studio,我有一个XML消息,其中包含两个参数,用于调用REST服务端点。但是,如果其中任何一个值是某个值,例如,我希望在通话前更改它们 <Interface Server="ABC" Server2="DEF"/> 如果其中任何一个值为“ABC”,则应始终将其替换为“BC”,并且在调用REST服务时,我会在上述示例中发送param1=“BC”和param2=“DEF”。 我正在考虑一个选择路由器,检查服务器是否为“ABC”,然后设置一个流变量param1=“BC”,但后来我意识到,如果

我有一个XML消息,其中包含两个参数,用于调用REST服务端点。但是,如果其中任何一个值是某个值,例如,我希望在通话前更改它们

<Interface Server="ABC" Server2="DEF"/>

如果其中任何一个值为“ABC”,则应始终将其替换为“BC”,并且在调用REST服务时,我会在上述示例中发送param1=“BC”和param2=“DEF”。 我正在考虑一个选择路由器,检查服务器是否为“ABC”,然后设置一个流变量param1=“BC”,但后来我意识到,如果服务器2为“ABC”,我将不得不再次对其执行相同的操作…这感觉就像。。这一定是一个更容易实现的方法? 我说得对吗?我可以使用一些巧妙的MEL或XPATH3表达式来始终将值替换为“BC”(如果其中任何一个值是“ABC”)吗


关于

您可以尝试以下配置:

<enricher doc:name="Message Enricher">
    <dw:transform-message doc:name="Transform Message">
    <dw:set-payload><![CDATA[%dw 1.0
%output application/java
%var evaluation = "ABC"
%var substitution = "BC"
%function substitute(serverVal)(
    serverVal when serverVal != evaluation otherwise substitution
)
---
payload.Interface.@ mapObject {
    ($$): substitute($)
}
]]></dw:set-payload>
    </dw:transform-message>
    <enrich source="#[payload.Server]" target="#[variable:param1]"/>
    <enrich source="#[payload.Server2]" target="#[variable:param2]"/>
</enricher>

很好的方法,我将给出一个goHmm,我得到一个SAXParser异常,这仅仅是DataWeave吗?因为我正在运行CE?DataWeave是EE特性之一。我已经更新了使用Groovy作为替代品的答案,我也这么认为,所以我开始使用Groovy。这帮了大忙,谢谢!这看起来有点奇怪,Groovy脚本只将第一个标记转换为映射,而另一个标记似乎被删除了?最好读一下这个,我喜欢Groovy
<scripting:component doc:name="Groovy">
<scripting:script engine="Groovy"><![CDATA[def attributeMap = new XmlSlurper().parseText(payload).attributes()

attributeMap.each() {
    it.value = it.value == "ABC" ? "BC" : it.value
}

payload = attributeMap]]></scripting:script>
</scripting:component>