Использование функций 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)">
Это работает для меня.