wso2 - 在 WSO2 EI 中迭代的最佳方法是什么?
问题描述
在阅读了 WSO2 EI References 之后,我仍然对如何在 EI 序列中使用迭代器感到困惑。就我而言,我有一个像这样的有效载荷......
{
...
"array": [
{"cpf": "12345678911"},
{"cnpj":"12345678912346"}
]
}
所以我必须反复检查这些人是否存在使用其他网络服务。为了实现该流程,我使用迭代调解器拆分消息,然后构建逻辑以进行如下验证。
实现此图像的代码如下:
<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”旨在允许在数据库中插入新的合同信息。
问题:添加此迭代器后,服务开始在数据库中进行重复插入。看起来迭代没有在标签“迭代器”的边缘完成。这就像迭代继续到其余的序列。
尝试:为了解决这个问题,我尝试在迭代器之后添加一个聚合器调解器。但是或者没有任何效果结束重复的插入仍然存在,或者我收到一条错误消息。
那么在 WSO2 EI 中进行此迭代的正确乳清是什么?
解决方案
正如您所提到的,迭代甚至会在迭代标记之外发生,直到使用聚合中介。要解决此问题,您需要在迭代调解器内添加聚合调解器。这将停止迭代器标记本身内的迭代。
对于您的用例,您可能需要continueParent="true"
在IterateMediator中进行设置,以便在 iterate 调解器之后继续进行调解,以便在数据库中插入操作。
推荐阅读
- robotframework - 如果错误语法无效则运行关键字(
,第 1 行) - database - 如果重新编译规范,是否必须重新编译主体
- python - How to delete elements in 2-dimensional array with 1-dimensional array accordingly
- combinations - 具有不同值的连续元素的数组计数
- php - php7.2-fpm 缺少袜子文件
- html - 无论如何要在网站中获取用户的位置
- python - 无法在 alpine docker 映像上安装 PyMuPDF
- c++ - 关闭使用 CreateProcess() 打开的父进程后如何关闭消息框
- mysql - 在 MySQL 的一个 SELECT 语句中通过 > 100 个条件的最佳方法是什么?
- google-apps-script - 在使用 GAS 提交大型表单时,使用缓存服务来减少属性存储数据调用