WSO2 EI リファレンスを読んだ後でも、EI シーケンス内でイテレータを使用する方法についてまだ混乱しています。私の場合、このようなペイロードがあります....
{
...
"array": [
{"cpf": "12345678911"},
{"cnpj":"12345678912346"}
]
}
そのため、別の Web サービスを使用している連中が存在するかどうかを確認するために、反復する必要があります。そのフローを実現するために、反復メディエーターを使用してメッセージを分割し、次のようにそれらの検証を行うロジックを構築しています..
このイメージを実装するコードは次のとおりです。
<iterate description="" expression="//jsonObject/array" id="myid">
<target>
<sequence>
<property expression="json-eval($.array.cpf)" name="tipoCPF" scope="default" type="STRING"/>
<filter description="" xpath="boolean(get-property('tipoCPF'))">
<then>
<property expression="json-eval($.array.cpf)" name="uri.var.cpf" scope="default" type="STRING"/>
<call>
<endpoint>
<http method="get" uri-template="http://endpoint/service/{uri.var.cpf}"/>
</endpoint>
</call>
<filter regex="200" source="get-property('axis2','HTTP_SC')">
<then/>
<else>
<payloadFactory description="" media-type="json">
<format>{
"code":"400",
"error":"CPF inexistente"
}</format>
<args/>
</payloadFactory>
<property name="HTTP_SC" scope="axis2" type="STRING" value="400"/>
<respond/>
</else>
</filter>
</then>
<else>
<property expression="json-eval($.array.cnpj)" name="tipoCNPJ" scope="default" type="STRING"/>
<filter xpath="boolean(get-property('tipoCNPJ'))">
<then>
<property expression="json-eval($.array.cnpj)" name="uri.var.cnpj" scope="default" type="STRING"/>
<header name="Authorization" scope="transport" value="Basic Y29yZS5jb25zdWx0aW5nOm8xNXRyZWI="/>
<call>
<endpoint>
<http method="get" uri-template="http://endpoint/service/cnpj/{uri.var.cnpj}"/>
</endpoint>
</call>
<filter regex="200" source="get-property('axis2','HTTP_SC')">
<then/>
<else>
<payloadFactory media-type="json">
<format>{
"code":"400",
"error":"CNPJ inexistente"
}</format>
<args/>
</payloadFactory>
<property name="HTTP_SC" scope="axis2" type="STRING" value="400"/>
<respond/>
</else>
</filter>
</then>
<else>
<call>
<endpoint>
<http method="get" uri-template="http://endpoint/service/info"/>
</endpoint>
</call>
</else>
</filter>
</else>
</filter>
</sequence>
</target>
</iterate>
このイテレータは、「インシーケンス」内の一部として機能します。「Insequence」は、データベース内に新しい契約情報を挿入できるように設計されています。
問題:この反復子を追加した後、サービスはデータベース内で重複した挿入を開始します。タグ 'iterator' の端で反復が終了していないようです。繰り返しが残りの順番に続くようです。
試してください:この問題を解決するために、イテレータの後にアグリゲータ メディエータを追加しようとしています。しかし、効果がなく、重複した挿入が持続するか、エラー メッセージが表示されます。
では、WSO2 EI 内でこの反復を行う正しいホエイは何ですか?
