2017-06-19 114 views
0

我学习骆驼和创建路线如下: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组件实现此目的?

回答

0

我最终实现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"; 
    } 
}