Использование функций XPath в медиаторе фильтра

В моей inSequence прокси я фильтрую запрос xpath в посреднике фильтра. Но я хочу использовать функции XPath, такие как exists() или же count(), Но это не работает и всегда создает исключение. Вот мой пример:

<filter xpath="count($body/myElement)>2">
 <drop/>
</filter>

И исключение, которое я всегда получаю:

ERROR - FilterMediator Error evaluating XPath expression : n:exists($body/avintis:Exception)
        org.jaxen.UnresolvableException: No Such Function exists

Как я могу заставить эти функции работать?

2 ответа

Решение

Вы можете использовать функции xpath с медиатором фильтра для изменения сегмента синапса, как показано ниже.

<filter xpath="fn:exists($body/myElement)">
 <drop/>
</filter>

Вы можете обратиться к Примеру 156: Интеграция услуг с указанием последовательности приема, доступной в [1], для дальнейшей выборки.

 <filter xpath="fn:number(get-property('SIMPLE_SER_AMT')) > fn:number(get-property('SECURE_SER_AMT'))">

[1]. http://wso2.org/project/esb/java/4.0.3/docs/samples/proxy_samples.html

Спасибо, Даршана

Для тех, кто интересуется, как использовать fn:count, вы можете попробовать:

<property name="itemCount" expression="fn:count(//*[local-name()='item'])"/>
<filter xpath="fn:number(get-property('itemCount')) > fn:number(0)">

Это работает для меня.

Другие вопросы по тегам