2016-09-16 11 views
1

私は、RESTサービスのエンドポイントを呼び出すために使用する2つのパラメータを持つXMLメッセージを持っています。それらのいずれかが特定の値である場合に、それらのいずれかが「ABC」は、それは常に「BC」とし、中に交換する必要がある値を持っている場合しかし、私は例ペイロードの値を代入する

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

のために、私の呼び出しの前にそれらを変更したいです私は上記の例でparam1 = "BC"とparam2 = "DEF"を送信するRESTサービスへの私の呼び出しです。 私はChoiceルータを考えていて、Serverが "ABC"であるかどうかを確認してから、フロー変数param1 = "BC"を設定しますが、それが "ABC"の場合はServer2に対して同じことをやり直す必要があります。それを達成するためのより簡単な方法でなければなりません。 私はそうですか?それらのどれかが "ABC"であれば、値を "BC"に代入するために巧妙なMELまたはXPATH3式を使用できますか?

よろしく

答えて

2

あなたは次のように構成してみてください:あなたのXMLソース内の多くの属性は、あなただけに応じenricher要素を追加する必要があるかにかかわらず

<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 
) 
--- 
[email protected] mapObject { 
    ($$): substitute($) 
} 
]]></dw:set-payload> 
    </dw:transform-message> 
    <enrich source="#[payload.Server]" target="#[variable:param1]"/> 
    <enrich source="#[payload.Server2]" target="#[variable:param2]"/> 
</enricher> 

を。 <enrich source="#[payload.Server3]" target="#[variable:param3]"/>は、新しい変数を設定するには:

<Interface Server="ABC" Server2="DEF" Server3="ABC"/>が次にあなただけ追加する必要があります。

はたとえば、新しいXMLソースを持っています。

注:DataWeaveは、EEの1つです。 CEについては、Groovyなどの他の変圧器で置き換えることができます。以下の例では、ペイロードはStringの形式です。元のアプリケーション/ xml形式はbyte-array-to-string-transformerを使用してStringに変換されます。

<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> 
+0

ニースのアプローチ、私はうーん、私はSAXParserの例外を取得しています – elwis

+0

行くことをあげる、DataWeaveのみということである - 私はCEを実行しているので、? – elwis

+0

* DataWeave *は** EE **機能の1つです。 Groovyを代替として使用するための私の答えを更新しました。 –