Использование тернарного оператора в Spring-Integration xpath-expression

Я использую Spring Integration и у меня есть следующие два вида ввода XML

Первый XML:

<businessArea>SomeValue</businessArea>

Второй XML:

<?xml version="1.0" encoding="UTF-8"?>
<businessArea>
   <Code>SomeValue</Code>
</businessArea>

Теперь я хочу сохранить значение Business Area в заголовке на основе следующих условий:

1) Если у business Area нет дочерних узлов, таких как <Code> во втором XML, затем значение узла businessArea должен храниться в шапке.

2) Если businessArea имеет какой-либо дочерний узел, такой как <Code> во втором xml, тогда нулевое значение должно быть сохранено в заголовке.

В настоящее время я использую следующее выражение:

<int-xml:header name="businessArea"  xpath-expression="//businessArea"  evaluation-type="STRING_RESULT"  overwrite="true" />

Но вышеприведенное выражение не будет хранить нулевое значение в заголовке, если xml похож на второй xml, который я показал выше. Я думаю, что мне нужно использовать троичный оператор в приведенном выше выражении. Кто-нибудь может предложить, пожалуйста, выражение, которое касается моей проблемы?

1 ответ

Решение

Это правда, XPath не такой оператор, но мы можем преодолеть это с помощью всего лишь SpEL. Благодаря Spring Integration у нас есть хава #xpath SpEL-функция из коробки:

<int:header-enricher>
    <int:header name="businessArea" expression="#xpath(payload, '//Code', 'boolean') ? null : #xpath(payload, '/businessArea')/>
</int:header-enricher>
Другие вопросы по тегам