2017-06-19 61 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"; 
    } 
}