Apache Camel:如何在HTTP URI中动态设置标题值?
问题描述:
我学习骆驼和创建路线如下:Apache Camel:如何在HTTP URI中动态设置标题值?
from("timer:stream?period={{inbound.timer.period}}")
...
.setHeader(Exchange.HTTP_URI, simple(outboundUri()))
...
.multicast()
.to(
"stream:header",
"file://build?autoCreate=false",
outboundHttp
);
的outboundUri()
方法返回一个与URI路径中,${header.CamelFileName}
的占位符。我想要做的是使用某种头部映射器来解决这个问题,我可以按照优先级顺序查看一些头文件,如果没有,请为CamelFileName
设置默认值。
如何使用HTTP4
组件实现此目的?
答
我最终实现Processor如下:
public class FilenameHeaderMessageProcessor implements org.apache.camel.Processor {
private static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd-kkmm");
@Override
public void process(Exchange exchange) throws Exception {
Message in = exchange.getIn();
Map<String, Object> inHeaders = in.getHeaders();
log.debug("In headers: {}.", inHeaders);
Message out = exchange.getOut();
// Without this, out body is null
out.setBody(in.getBody());
Object filename = inHeaders.computeIfAbsent(FILE_NAME,
k -> Optional.ofNullable(inHeaders.get(KEY))
.orElse(defaultFilename())
);
out.setHeader(FILE_NAME, filename);
}
private final String defaultFilename() {
return DATE_TIME_FORMATTER.format(LocalDateTime.now()) + ".out";
}
}