2016-06-13 42 views
0
<setHeader headerName="smsRecivers"><simple>{{reciversList}}</simple></setHeader> 

我有一个列表手机号码(以逗号分隔形式reciversList = 999999999,88888888,799999999),我有互送短信,通过reciversList列表循环我怎样才能环路Apache的骆驼

一些像

<loop on="reciversList"> 
    // so some work 
</loop> 

我看着循环功能,它有一个常数。

回答

1

您可以使用http://camel.apache.org/loop.html

<route> 
    <setHeader headerName="smsRecivers"> 
    <simple>{{reciversList}}</simple> 
    </setHeader> 
    <loop> 
    <simple>${in.header.smsRecivers.size}</simple> 
    ..... 
    </loop> 
</route> 

内部循环体你可以得到由索引列表的项目,使用excange财产CamelLoopIndex,也可以使用自定义增量指数( 可以在其他计算标题)。

2

如果您想要在报头值而不是消息正文上拆分,可以使用Camel Splitter EIP并编写自己的方法来处理拆分。

你的路线将是这个样子:

<camelContext xmlns="http://camel.apache.org/schema/spring"> 
    <route> 
     <from uri="direct:start"/> 
     <split> 
      <method ref="splitterBean" method="split"/> 
      Process each SMS here 
     </split> 
    </route> 
</camelContext> 

然后你可以使用MySplitterBean例如在Apache分离器页面,并写出像这样的方法:

public List<Message> split(@Header(value = "smsReceivers") String header, @Body String body) { 
    List<Message> answer = new ArrayList<Message>(); 
    // Perform header null checking here 
    header = header.substring(header.indexOf("=")+1); // Remove var name 
    String[] parts = header.split(","); 
    for (String part : parts) { 
     DefaultMessage message = new DefaultMessage(); 
     message.setHeader("smsReceiver", part); 
     message.setBody(body); 
     answer.add(message); 
    } 
    return answer; 
} 

在循环,您可以通过“smsReceiver”标题简单地访问SMS号码。