フィルタ条件でプロパティがnullであるかどうかを確認したいのですが、コンテキストに存在しないか、nullである可能性もあります。両方のケースをカバーしたいと思います。以下のようなフィルター式を書くにはどうすればよいですか?
これを達成するための正しい方法は何ですか?
以下のようにブールXPath関数を使用して、プロパティの存在を確認できます。
<filter source="boolean(get-property('yourProperty'))" regex="false">
<then>
<!-- NULL OR NON EXIST -->
</then>
<else>
<!-- EXIST -->
</else>
</filter>
次を使用できます。
<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>
このソリューションも機能します。
<filter source="boolean(get-property('yourProperty'))" regex="true">
<then>
<!-- EXIST -->
</then>
<else>
<!-- NULL OR NON EXIST -->
</else>
</filter>
以下のコードスニペットを使用してください
<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>
、これは再び他の状態に行く必要があります