在camel路由中设置多个标头

时间:2014-05-29 19:05:40

标签: apache-camel

是否可以使用对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"/>

或者我应该为此创建自定义处理器?

1 个答案:

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