2016-08-30 9 views
1

フィルタメディエータを使用してレスポンスがコレクションであるかどうかを確認しようとしています。wso2フィルタメディエータへの応答プロパティ

それでは、私がここでやったことはbelongs_to_collectionの要素のidは数値

<property expression="/soapenv:Envelope/soapenv:Body/root:movie/belongs_to_collection/id" name="collection" scope="default" type="STRING"/> 
<filter description="" regex="[0-9]+" source="get-property('collection')">...</filter> 

であるかどうかを確認することです。ここに私の完全なAPIの設定が http://pastebin.com/QA3GCd1W

だと、ここでフィルタ http://pastebin.com/0dxweJu3

ことに応じます
+0

ケビン、あなたの質問は何ですか? – ophychius

+0

私が提供したapiの設定は機能していません。また、Log Mediatorを使用してコレクションプロパティを印刷しようとしましたが、何も表示されません。 –

+0

このプロパティが実際に動作しているかどうかは疑問です。 '

答えて

1

あなたが名前空間に対処したくない場合、あなたはこのようなlocal-name()を使用することができます。

<property name="collection" 
expression="//*[local-name()='belongs_to_collection']/*[local-name()='id']/text()" 
scope="default" 
type="STRING"/> 
+0

この回答は私のために働いた –

2

式で名前空間接頭辞を使用する場合、それらの名前空間を定義する必要があります。たとえば:Envelopeタグので、あなたはもうあなたの表現でそれを配置する必要はありません:あなたのAPIを使用しているとき、私は見

<property expression="/root:movie/belongs_to_collection/id" 
name="collection" scope="default" type="STRING" xmlns:root="www.wso2esb.com"/> 

応答は、しかし

<?xml version='1.0' encoding='utf-8'?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Body> 
     <jsonObject> 
      <belongs_to_collection> 
       <id>8650</id> 
... 

あなたのルート要素はsoapenvです。最初の/は、ルート要素を参照します。それ以降は、ルート要素内の要素を参照します。

次のように表現する必要があります:

<property xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
name="collection" expression="/soapenv:Body/jsonObject/belongs_to_collection/id" 
scope="default" type="STRING"/> 
+0

'local-name()'を使うこともできます。 。 – Bee

関連する問題