2016-02-02 75 views
2

我使用的是Spring Integration Zip擴展,看起來我正在丟失在流中上游添加的標頭。我猜他們在UnZipResultSplitter.splitUnzippedMap()中迷路了,因爲我沒有看到任何明確複製它們的東西。使用UnZipResultSplitter時丟失的標頭

我似乎記得,這在分離器中並不常見,但我無法確定在這種情況下應該使用什麼策略。

回答

2

是的!

它看起來像一個錯誤。

splitter合同是這樣的:

if (item instanceof Message) { 
    builder = this.getMessageBuilderFactory().fromMessage((Message<?>) item); 
} 
else { 
    builder = this.getMessageBuilderFactory().withPayload(item); 
    builder.copyHeaders(headers); 
} 

所以,如果這些分裂項目的消息已經,就像在我們UnZipResultSplitter的情況下,我們只需要使用消息是沒有從上游複製頭。

請提出一個關於此事的JIRA票(https://jira.spring.io/browse/INTEXT)。

同時讓我們考慮一些解決方法:

public class MyUnZipResultSplitter { 

    public List<Message<Object>> splitUnzipped(Message<Map<String, Object>> unzippedEntries) { 

     final List<Message<Object>> messages = new ArrayList<Message<Object>>(unzippedEntries.size()); 

     for (Map.Entry<String, Object> entry : unzippedEntries.getPayload().entrySet()) { 
      final String path = FilenameUtils.getPath(entry.getKey()); 
      final String filename = FilenameUtils.getName(entry.getKey()); 
      final Message<Object> splitMessage = MessageBuilder.withPayload(entry.getValue()) 
       .setHeader(FileHeaders.FILENAME, filename) 
       .setHeader(ZipHeaders.ZIP_ENTRY_PATH, path) 
       .copyHeaders(unzippedEntries/getHeaders()) 
       .build(); 
      messages.add(splitMessage); 
     } 
     return messages; 
    } 

}