Mule 3.4.0 Выбор маршрутизатора на основе наличия узла в полезной нагрузке с использованием Xpath

64
9

У меня есть несколько входов Soap, и я хотел бы определить курс действий в моем Mule Flow на основе существования элемента в полезной нагрузке.

<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", я хотел бы пройти один маршрут и, если "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" никогда не идентифицируется, поскольку он пуст. Я попробовал то, что упоминается в этом месте. Использование XPath для проверки того, содержит ли мыльный конверт дочерний узел, но безрезультатно. Моя текущая попытка основана на том, как определить использование XPath, если элемент присутствует и не пуст? ,

Мысли?

спросил(а) 2021-01-25T14:57:20+03:00 4 месяца, 3 недели назад
1
Решение
63

В вашем XPath вы тестируете child text node, поэтому он никогда не переходит на элемент первого выбора, если у вас есть пустой узел в образце полезной нагрузки. Если целью является выполнение задачи, даже если узел пуст, сделайте следующее:

<choice>
<when expression="#[xpath('fn:count(//soapenv:Envelope/soapenv:Body/xyz:myFirst)') != 0]">
//Do something First Here
</when>
<when expression="#[xpath('fn:count(//soapenv:Envelope/soapenv:Body/xyz:mySecond') != 0]">
//Do something Second Here
</when>
<otherwise>
//Didn't match any!
</otherwise>
</choice>

ответил(а) 2021-01-25T14:57:20+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема