【问题标题】:Using XPath functions in filter mediator在过滤器中介器中使用 XPath 函数
【发布时间】:2013-02-06 16:17:27
【问题描述】:

在代理的 inSequence 中,我使用 filter mediator 中的 xpath 查询进行过滤。但我想使用像exists() 或count() 这样的XPath 函数。但这不起作用,并且总是会产生异常。这是我的例子:

<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

我怎样才能使这些功能发挥作用?

【问题讨论】:

    标签: xpath wso2 wso2esb synapse


    【解决方案1】:

    您可以将 xpath 函数与 filter mediator 一起使用来修改突触片段,如下所示。

    <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

    谢谢你, 佛法

    【讨论】:

    • 这只是解决了 exists() 函数 - 但是我如何在 xpath 中创建一个 count() - 这个函数也不起作用......
    • 而且 fn:number 不起作用!我得到与 count() 或 exists() 相同的异常。
    • 我测试了样本 156,它与 number() 函数配合得很好,请发布您的突触,看看哪里出了问题
    【解决方案2】:

    对于那些想知道如何使用 fn:count 的人,您可以尝试:

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

    这对我有用。

    【讨论】:

    • 你说的完全正确。我发现 里面的 xpath="" 不支持很多功能。由于我可能首先遇到问题,所以我现在在属性表达式中执行整个逻辑。因此,您甚至可以在属性内执行 number()。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多