如何在收集聚合器之前过滤有效负载的集合

时间:2014-10-31 11:11:49

标签: filter mule

我收到服务中的收集地址:

[{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}]

1 个答案:

答案 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;