是否可以使用对setHeader的单次调用在camel路由中设置多个交换头。
像这样的东西
<from uri="file://inputdir/?delete=true" />
<!-- need to set multiple headers at once(as a comma separated list)-->
<setHeader headerName="headername">
<constant>headerval</constant>
</setHeader>
<to uri="mock:end"/>
或者我应该为此创建自定义处理器?
答案 0 :(得分:3)
据我所知,你不能一次设置多个标题。在您的情况下,自定义处理器可能会更有效。
您可能希望在此处查看简单表达式语言,您可以在camel route xml文件中使用OGNL表示法。 OGNL允许您在表达式中指定一系列方法。
例如,假设您有一条包含Employee
对象的消息,该对象具有getSalaryGrade()
方法,您可以使用以下语法将header
设置为此值:
<setHeader headerName="SalaryGrade">
<simple>${body.getSalaryGrade()}</simple>
</setHeader>
例如,您可以创建一个简单的类,它返回一个列表并将列表存储在标题中,然后通过简单的路径访问列表。以下代码未经测试,但应该给你一个想法。
public class ListCity {
public List<String> ListCities()
{
ArrayList< String> list = new ArrayList<String>();
list.add("New York");
list.add("JOhannesburg");
list.add("HoChiMinh");
return list;
}
}
在xml中声明list city bean。然后,您可以使用以下内容将此列表设置为标题:
<setHeader headerName="CityList">
<simple>${listCity.ListCities()}</simple>
</setHeader>