2
我使用的是Spring Integration Zip擴展,看起來我正在丟失在流中上游添加的標頭。我猜他們在UnZipResultSplitter.splitUnzippedMap()
中迷路了,因爲我沒有看到任何明確複製它們的東西。使用UnZipResultSplitter時丟失的標頭
我似乎記得,這在分離器中並不常見,但我無法確定在這種情況下應該使用什麼策略。
我使用的是Spring Integration Zip擴展,看起來我正在丟失在流中上游添加的標頭。我猜他們在UnZipResultSplitter.splitUnzippedMap()
中迷路了,因爲我沒有看到任何明確複製它們的東西。使用UnZipResultSplitter時丟失的標頭
我似乎記得,這在分離器中並不常見,但我無法確定在這種情況下應該使用什麼策略。
是的!
它看起來像一個錯誤。
的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;
}
}