我收到服务中的收集地址:
[{addressNumber=2386674, addressType=Email, line1=sdfjnfk.de@gmail.com}, {addressNumber=2386690, addressType=Postal, line1=VILLA PALMS NO X}, {addressNumber=1771597, addressType=Physical, line1=P O BOX 56}]
我只想要addressType = Postal和addressType = Email的地址。然后我想聚合新的有效载荷。我目前的策略是在一个foreach中,有效载荷通过过滤器,然后聚合过滤器后剩下的。但是在有效载荷通过过滤器后它不会聚合。好像mule刚好在聚合器之前就停止了。当我删除过滤器时,聚合器再次工作。
<flow name="prototypingFlow1" doc:name="prototypingFlow1">
<foreach doc:name="For Each">
<or-filter doc:name="Or">
<expression-filter expression="#[payload.addressType == 'Postal']"/>
<expression-filter expression="#[payload.addressType == 'Email']"/>
</or-filter>
<collection-aggregator failOnTimeout="true" doc:name="Collection Aggregator"/>
</foreach>
</flow>
如何在使用过滤器后聚合有效负载。或者可能在聚合器中使用过滤器?我想仅使用电子邮件和邮政地址返回此有效负载
[{addressNumber=2386674, addressType=Email, line1=sdfjnfk.de@gmail.com}, {addressNumber=2386690, addressType=Postal, line1=VILLA PALMS NO X}]
答案 0 :(得分:1)
您是否可以使用简单的mule groovy组件来过滤掉您不想要的数据,而不是实现过滤器和聚合器?
这是一个简单的例子,它将采用JSON字符串(如果有合适的集合,当然可以省略)并过滤掉所有类型的东西&#34;邮政&#34;或&#34;电子邮件&#34;。
import groovy.json.JsonSlurper;
JsonSlurper slurper = new JsonSlurper();
def inCollection = slurper.parseText(payload);
def outCollection=[];
for ( a in inCollection ) {
if(a['addressType'] == 'Postal' || a['addressType'] == 'Email'){
outCollection.push(a);
}
}
return outCollection;