我想检查属性在过滤条件中是否为null。它可能在上下文中不存在,或者它也可以为null。我想涵盖两种情况。 如何编写过滤器表达式 像下面我尝试的东西,但不能正常工作
实现此目标的正确方法是什么?
答案 0 :(得分:6)
您可以通过如下所示的布尔XPath函数来检查属性的存在性
<filter source="boolean(get-property('yourProperty'))" regex="false">
<then>
<!-- NULL OR NON EXIST -->
</then>
<else>
<!-- EXIST -->
</else>
</filter>
答案 1 :(得分:2)
这是我的解决方法。
<filter source="boolean(get-property('yourProperty'))='null'" regex="false">
<then>
<!-- NULL OR NON EXIST -->
</then>
<else>
<!-- EXIST -->
</else>
</filter>
答案 2 :(得分:0)
使用以下代码段
<api xmlns="http://ws.apache.org/ns/synapse" name="TestFilter" context="/test1">
<resource methods="POST" url-mapping="/filter">
<inSequence>
<filter xpath="$body//*[local-name()='FilterCondition']/text()">
<then>
<log>
<property name="ThenCondition" expression="."/>
</log>
</then>
<else>
<log>
<property name="ElseCondition" expression="."/>
</log>
</else>
</filter>
</inSequence>
</resource>
</api>
尝试使用示例XML
<Check>
<FilterCondition>123</FilterCondition>
</Check>
因此您的测试用例应如下所示
1:使用相同的XML,流程应转到then condition
。
2:像FilterCondition
一样在<FilterCondition/>
中传递空值,这应该转到其他条件。
3:删除标签FilterCondition
,然后通过
<Check></Check>
,这应该再次转到其他条件
答案 3 :(得分:0)
您可以使用:
<property
expression="$body//*[local-name()='Address']/text()"
name="Address" scope="default" type="STRING"/>
及之后:
<filter regex="Tehran" source="get-property('Address')" xmlns:ns="http://org.apache.synapse/xsd">
<then/>
<else>
<log/>
<send/>
</else>
</filter>
答案 4 :(得分:0)
此解决方案也有效。
<filter source="boolean(get-property('yourProperty'))" regex="true">
<then>
<!-- EXIST -->
</then>
<else>
<!-- NULL OR NON EXIST -->
</else>
</filter>