wso2 ESB过滤器检查null是否获得属性

时间:2018-07-04 01:28:19

标签: wso2 wso2esb

我想检查属性在过滤条件中是否为null。它可能在上下文中不存在,或者它也可以为null。我想涵盖两种情况。 如何编写过滤器表达式 像下面我尝试的东西,但不能正常工作

实现此目标的正确方法是什么?

5 个答案:

答案 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>