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
составная часть?
1 ответ
Решение
В итоге я внедрил процессор следующим образом:
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";
}
}