Apache-Camel访问string-template中的标头值

时间:2015-02-05 09:50:51

标签: apache-camel stringtemplate

我的问题是,我不知道如何在字符串模板声明中访问交换机的标头值。我想有国际化的邮件模板。下面的测试代码......

public class StringTemplateTest extends CamelTestSupport {

    @EndpointInject(uri = "mock:result")
    protected MockEndpoint resultEndpoint;

    @Produce(uri = "direct:start")
    protected ProducerTemplate template;

    @Test
    public void testTemplating() throws Exception {
        resultEndpoint.expectedBodiesReceived("test");
        template.sendBodyAndHeader("test", "lang", "de");
        resultEndpoint.assertIsSatisfied();
    }

    @Override
    protected RouteBuilder createRouteBuilder() {
        return new RouteBuilder() {
            public void configure() {
                from("direct:start").to("string-template:mailTemplate_$simple{in.header.lang}.tm").to("mock:result");
            }
        };
    }
}

结束于......

java.io.FileNotFoundException: Cannot find resource: mailTemplate_$simple{in.header.lang}.tm in classpath for URI: mailTemplate_$simple{in.header.lang}.tm

我希望,字符串模板是 mailTemplate_de.tm 的外观。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您的问题是,在构建路由时会评估.to("component:xyz")个端点 - 它们不是动态的,也不会获取${}属性。

相反,您需要使用recipientList,如下所示:

from("direct:start")
    .recipientList(simple("string_template:mailTemplate_${in.header.lang}.tm"))
    .to("mock:result")