我正在使用Spring Integration Zip扩展,看起来我正在丢失我在流中添加上游的标题。我猜他们在UnZipResultSplitter.splitUnzippedMap()
中迷失了,因为我没有看到任何明确复制它们的东西。
我似乎记得,对于分裂者来说这并不罕见,但我无法确定在这种情况下应该采用什么策略。
答案 0 :(得分:2)
是的!
它看起来像一个bug。
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;
}
}