如果你想用纯java访问交换的属性,你可以使用
.process
或
.exchange
。如果需要访问正文或页眉,可以使用
e.getMessage().getBody()
和
e.getMessage().getHeader()
from("direct:generic-route")
.process( e -> {
String processKey = e.getProperty("processKey", String.class);
Processor processor = Util.getProcessor(processKey);
processor.process(e);
})
.setProperty("targetURL").exchange( e -> {
String urlKey = e.getProperty("urlKey", String.class);
return Util.getUrl(urlKey);
})
.toD("${exchangeProperty.targetURL}");
还要确保修复了此方法的返回类型:
public static Processor getUrl(String urlKey){
return (String)routerResources.get(urlKey);
}
附带说明一下,您实际上可以通过简单的语言使用存储在body、header或property中的map。
public class ExampleTest extends CamelTestSupport {
@Test
public void example(){
template.sendBodyAndHeader("direct:example", null, "urlKey", "urlA");
}
@Override
protected RoutesBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
Map<String, String> urlMap = new HashMap<>();
urlMap.put("urlA", "direct:pointA");
urlMap.put("urlB", "direct:pointB");
from("direct:example")
.setProperty("urlMap").constant(urlMap)
.log("url: ${exchangeProperty.urlMap['${headers.urlKey}']}");
}
};
}
}