2014-10-31 74 views
0

先篩選有效載荷的集合,我收到一個集合地址從服務:如何收集聚合

[{addressNumber=2386674, addressType=Email, [email protected]}, {addressNumber=2386690, addressType=Postal, line1=VILLA PALMS NO X}, {addressNumber=1771597, addressType=Physical, line1=P O BOX 56}] 

我只想地址類型=郵政地址類型和=電子郵件地址。然後我想要聚合新的有效載荷。我目前的策略是有效載荷通過過濾器,然後聚合過濾器後剩下的部分。但是在有效載荷通過過濾器之後,它不會聚合。就好像騾子剛好在聚合器之前停下來。當我刪除過濾器聚合器再次工作。

<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, [email protected]}, {addressNumber=2386690, addressType=Postal, line1=VILLA PALMS NO X}] 

回答

1

你不能用一個簡單的騾子常規組件,以篩選出您不希望將數據返回,而不是執行過濾器和集成這種負載,?

這是一個簡單的例子,它將採用JSON字符串(當然,如果有合適的集合可用,則可以省略)並過濾掉所有類型爲「Postal」或「Email」的東西。

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;