Решение 1: Определите свою собственную стратегию
Вы можете иметь отдельный экземпляр AggregationStrategy
для каждого конкретного заголовка:
public class MyAggregationStrategy implements AggregationStrategy {
private String headerName;
public MyAggregationStrategy(String headerName) {
this.headerName = headerName;
}
@Override
public Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
copyHeader(newExchange, oldExchange);
return oldExchange;
}
void copyHeader(final Exchange newExchange,
final Exchange oldExchange) {
oldExchange.getIn().setHeader(
headerName,
newExchange.getIn().getHeader(headerName));
}
}
Затем используйте эти стратегиикак это:
.enrich("direct:step1-processing", new MyAggregationStrategy(SomeBean.SpecificHeader_1))
.enrich("direct:step2-processing", new MyAggregationStrategy(SomeBean.SpecificHeader_2))
Решение 2: Используйте лямбда
С вашим слегка адаптированным исходным copyHeaders()
методом:
Exchange copyHeader(final String headerName,
final Exchange newExchange,
final Exchange oldExchange) {
oldExchange.getIn().setHeader(
headerName,
newExchange.getIn().getHeader(headerName));
return oldExchange;
}
Затем определитенеобходимые стратегии:
AggregationStrategy header1Strategy = (oldExchange, newExchange) -> copyHeader("my-header-1", oldExchange, newExchange);
AggregationStrategy header2Strategy = (oldExchange, newExchange) -> copyHeader("my-header-2", oldExchange, newExchange);
Наконец, используйте их:
.enrich("direct:step1-processing", header1Strategy)
.enrich("direct:step2-processing", header2Strategy);