骆驼:在多个路由中使用 header 值

camel: use header value in multiple routes

是否可以在一个路由中设置 header,然后在同一上下文的另一条路由中再次使用它?
例如,我有一条路线将 header 设置为:

<setHeader headerName="clientId">
   <xpath>/Alarm/clientid/text()</xpath>
</setHeader>

该路由使用死信通道在传递失败时将消息发送到同一上下文中的错误路由,我想使用我在错误路由发送的消息中定义的 clientId header,但目前调用 header returns 什么都没有(我假设是一个空字符串)。

它应该工作,我使用的是 camel 2.15.1,检查下面的代码,如果你 运行 它你应该看到 header

<bean id="mybean" class="java.lang.Exception" />
<camel:camelContext xmlns="http://camel.apache.org/schema/spring"
    trace="false">
    <camel:errorHandler id="deadLetterErrorHandler"
        type="DeadLetterChannel" deadLetterUri="direct:b">

    </camel:errorHandler>

    <camel:route>
        <camel:from uri="timer:foo?repeatCount=1" />
        <camel:setHeader headerName="myheader">
            <camel:simple>Sundar</camel:simple>
        </camel:setHeader>
        <camel:to uri="direct:a" />

    </camel:route>
    <camel:route errorHandlerRef="deadLetterErrorHandler">
        <camel:from uri="direct:a" />
        <camel:throwException ref="mybean"></camel:throwException>
    </camel:route>

    <camel:route>
        <camel:from uri="direct:b" />
        <camel:log message="${in.header.myheader}"/>
    </camel:route>
</camel:camelContext>

它应该打印如下日志

24 Feb 2016 19:09:47,707  route3 INFO  Sundar