CAMEL-22294: camel-zipfile - decompression of multi-member archive. Thanks to Jens Kordowski for the patch.
diff --git a/components/camel-zip-deflater/src/main/java/org/apache/camel/dataformat/deflater/GzipDeflaterDataFormat.java b/components/camel-zip-deflater/src/main/java/org/apache/camel/dataformat/deflater/GzipDeflaterDataFormat.java
index 4f2700d..462052f 100644
--- a/components/camel-zip-deflater/src/main/java/org/apache/camel/dataformat/deflater/GzipDeflaterDataFormat.java
+++ b/components/camel-zip-deflater/src/main/java/org/apache/camel/dataformat/deflater/GzipDeflaterDataFormat.java
@@ -59,7 +59,7 @@
 
         OutputStreamBuilder osb = OutputStreamBuilder.withExchange(exchange);
         try {
-            unzipInput = new GzipCompressorInputStream(inputStream);
+            unzipInput = new GzipCompressorInputStream(inputStream, true);
             IOHelper.copy(unzipInput, osb);
             return osb.build();
         } finally {
diff --git a/components/camel-zip-deflater/src/test/java/org/apache/camel/dataformat/deflater/GzipDataFormatTest.java b/components/camel-zip-deflater/src/test/java/org/apache/camel/dataformat/deflater/GzipDataFormatTest.java
index 09e5684..b9a211e 100644
--- a/components/camel-zip-deflater/src/test/java/org/apache/camel/dataformat/deflater/GzipDataFormatTest.java
+++ b/components/camel-zip-deflater/src/test/java/org/apache/camel/dataformat/deflater/GzipDataFormatTest.java
@@ -17,6 +17,7 @@
 package org.apache.camel.dataformat.deflater;
 
 import java.io.ByteArrayInputStream;
+import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
 import java.util.zip.GZIPInputStream;
 
@@ -80,4 +81,34 @@
 
         result.assertIsSatisfied();
     }
+
+    /* gzip file with two members, one containing the first 4 bytes of the uncompressed document
+     * and one containing the final 6 bytes of the payload.
+     * According to the RFC (https://www.rfc-editor.org/rfc/rfc1952#section-2.2) this is allowed.
+     */
+    @Test
+    public void testUnmarshalConcatenatedCompressedFiles() throws Exception {
+        context.addRoutes(new RouteBuilder() {
+            public void configure() {
+                from("direct:start")
+                        .unmarshal().gzipDeflater()
+                        .to("mock:result");
+            }
+        });
+        context.start();
+
+        byte[] gzBytes;
+        try (InputStream gzInput = getClass().getClassLoader().getResourceAsStream("concatenatedZippedFiles.gz")) {
+            assert gzInput != null : "concatenatedZippedFiles.gz not found in classpath";
+            gzBytes = gzInput.readAllBytes();
+        }
+
+        MockEndpoint result = context.getEndpoint("mock:result", MockEndpoint.class);
+        result.expectedMessageCount(1);
+        result.expectedBodiesReceived("foo\nfoobar\n".getBytes(StandardCharsets.UTF_8));
+
+        template.sendBody("direct:start", gzBytes);
+
+        result.assertIsSatisfied();
+    }
 }
diff --git a/components/camel-zip-deflater/src/test/resources/concatenatedZippedFiles.gz b/components/camel-zip-deflater/src/test/resources/concatenatedZippedFiles.gz
new file mode 100644
index 0000000..979b225
--- /dev/null
+++ b/components/camel-zip-deflater/src/test/resources/concatenatedZippedFiles.gz
Binary files differ