いくつかの Soap 入力があり、ペイロード内の要素の存在に基づいて Mule フローでの一連のアクションを決定したいと考えています。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xyz="http://xyz.abc.com/">
<soapenv:Header/>
<soapenv:Body>
<xyz:myFirst/>
</soapenv:Body>
</soapenv:Envelope>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xyz="http://xyz.abc.com/">
<soapenv:Header/>
<soapenv:Body>
<xyz:mySecond>
Something here
</xyz:mySecond>
</soapenv:Body>
</soapenv:Envelope>
上記のペイロードで、「myFirst」が存在する場合は 1 つのルートに進み、「mySecond」が存在する場合は別のルートに進みます。
私は次のことを試しました
<choice>
<when expression="#[xpath('fn:count(//soapenv:Envelope/soapenv:Body/xyz:myFirst/child::text())') != 0]">
//Do something First Here
</when>
<when expression="#[xpath('fn:count(//soapenv:Envelope/soapenv:Body/xyz:mySecond/child::text())') != 0]">
//Do something Second Here
</when>
<otherwise>
//Didn't match any!
</otherwise>
</choice>
しかし、「myFirst」は空であるため識別されません。この場所Using XPath to Check if Soap Envelope Contains Child Nodeで言及されていることを試しましたが、役に立ちませんでした。私の現在の試みは、要素が存在し、空でない場合、XPathを使用して伝える方法に基づいていますか? .
考え?