CAMEL-10791-added option to handle empty directories while unzipping
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/033bb9d9 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/033bb9d9 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/033bb9d9 Branch: refs/heads/master Commit: 033bb9d9a1f0db458c7121d93aabeefe6d4bc476 Parents: 741b047 Author: onders86 <ondersez...@gmail.com> Authored: Mon Mar 13 11:04:44 2017 +0300 Committer: Claus Ibsen <davscl...@apache.org> Committed: Tue Mar 14 18:29:38 2017 +0100 ---------------------------------------------------------------------- .../camel/dataformat/zipfile/ZipFileDataFormat.java | 14 ++++++++++++++ .../apache/camel/dataformat/zipfile/ZipIterator.java | 7 +++++++ 2 files changed, 21 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/033bb9d9/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipFileDataFormat.java ---------------------------------------------------------------------- diff --git a/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipFileDataFormat.java b/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipFileDataFormat.java index b251201..3704d94 100644 --- a/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipFileDataFormat.java +++ b/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipFileDataFormat.java @@ -39,6 +39,7 @@ import static org.apache.camel.Exchange.FILE_NAME; */ public class ZipFileDataFormat extends ServiceSupport implements DataFormat, DataFormatName { private boolean usingIterator; + private boolean supportEmptyDirectory; @Override public String getDataFormatName() { @@ -72,6 +73,11 @@ public class ZipFileDataFormat extends ServiceSupport implements DataFormat, Dat @Override public Object unmarshal(final Exchange exchange, final InputStream inputStream) throws Exception { + if (supportEmptyDirectory) { + exchange.getIn().setHeader("unzipEmptyDirectorySupported", true); + } else { + exchange.getIn().setHeader("unzipEmptyDirectorySupported", false); + } if (usingIterator) { return new ZipIterator(exchange.getIn()); } else { @@ -104,6 +110,14 @@ public class ZipFileDataFormat extends ServiceSupport implements DataFormat, Dat public void setUsingIterator(boolean usingIterator) { this.usingIterator = usingIterator; } + + public boolean isSupportEmptyDirectory() { + return supportEmptyDirectory; + } + + public void setSupportEmptyDirectory(boolean supportEmptyDirectory) { + this.supportEmptyDirectory = supportEmptyDirectory; + } @Override protected void doStart() throws Exception { http://git-wip-us.apache.org/repos/asf/camel/blob/033bb9d9/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipIterator.java ---------------------------------------------------------------------- diff --git a/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipIterator.java b/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipIterator.java index 77312a3..6d58ad8 100644 --- a/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipIterator.java +++ b/components/camel-zipfile/src/main/java/org/apache/camel/dataformat/zipfile/ZipIterator.java @@ -40,11 +40,13 @@ public class ZipIterator implements Iterator<Message>, Closeable { static final Logger LOGGER = LoggerFactory.getLogger(ZipIterator.class); private final Message inputMessage; + private final boolean unzipEmptyDirectorySupported; private volatile ZipInputStream zipInputStream; private volatile Message parent; public ZipIterator(Message inputMessage) { this.inputMessage = inputMessage; + this.unzipEmptyDirectorySupported = (boolean)inputMessage.getHeader("unzipEmptyDirectorySupported"); InputStream inputStream = inputMessage.getBody(InputStream.class); if (inputStream instanceof ZipInputStream) { zipInputStream = (ZipInputStream)inputStream; @@ -129,6 +131,11 @@ public class ZipIterator implements Iterator<Message>, Closeable { while ((entry = zipInputStream.getNextEntry()) != null) { if (!entry.isDirectory()) { return entry; + } else { + if (unzipEmptyDirectorySupported) { + ZipEntry dirEntry = new ZipEntry(entry.getName() + "."); + return dirEntry; + } } }