Apache-Camel 访问 string-template 中的 header 个值
Apache-Camel Accessing header values within string-template
我的问题是,我不知道如何在 string-template 声明中访问交换的 header 值。我想要国际化的邮件模板。下面的测试代码...
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
我预计,string-template 正在寻找 mailTemplate_de.tm。
提前感谢您的帮助!
您的问题是 .to("component:xyz")
端点在构建路由时进行评估 - 它们不是动态的,不会获取 ${}
属性。
您需要使用 recipientList
,像这样:
from("direct:start")
.recipientList(simple("string_template:mailTemplate_${in.header.lang}.tm"))
.to("mock:result")
我的问题是,我不知道如何在 string-template 声明中访问交换的 header 值。我想要国际化的邮件模板。下面的测试代码...
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
我预计,string-template 正在寻找 mailTemplate_de.tm。
提前感谢您的帮助!
您的问题是 .to("component:xyz")
端点在构建路由时进行评估 - 它们不是动态的,不会获取 ${}
属性。
您需要使用 recipientList
,像这样:
from("direct:start")
.recipientList(simple("string_template:mailTemplate_${in.header.lang}.tm"))
.to("mock:result")