web-dev-qa-db-ja.com

wso2ESBフィルターはget-propertyについてnullをチェックします

フィルタ条件でプロパティがnullであるかどうかを確認したいのですが、コンテキストに存在しないか、nullである可能性もあります。両方のケースをカバーしたいと思います。以下のようなフィルター式を書くにはどうすればよいですか?

これを達成するための正しい方法は何ですか?

6
Janier

以下のようにブールXPath関数を使用して、プロパティの存在を確認できます。

<filter source="boolean(get-property('yourProperty'))" regex="false">
    <then>
           <!-- NULL OR NON EXIST -->
    </then>
    <else>
           <!-- EXIST -->
    </else>
</filter>
9
Chandana

次を使用できます。

<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>
0
Yousef Shakouri

このソリューションも機能します。

<filter source="boolean(get-property('yourProperty'))" regex="true">
    <then>
           <!-- EXIST -->
    </then>
    <else>
           <!-- NULL OR NON EXIST -->
    </else>
</filter>
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に空の値を渡します。これはelse条件になります。 3:タグFilterConditionを削除し、渡すだけ

<Check></Check>

、これは再び他の状態に行く必要があります

0
amg_amit