You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by kw...@apache.org on 2019/09/04 07:04:55 UTC

svn commit: r1866356 - in /jackrabbit/commons/filevault/trunk/vault-core/src: main/java/org/apache/jackrabbit/vault/fs/io/ZipStreamArchive.java test/java/org/apache/jackrabbit/vault/fs/io/ZipArchiveTest.java

Author: kwin
Date: Wed Sep  4 07:04:55 2019
New Revision: 1866356

URL: http://svn.apache.org/viewvc?rev=1866356&view=rev
Log:
JCRVLT-362 expose input stream also for META-INF entries

This closes #57

Modified:
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/ZipStreamArchive.java
    jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/fs/io/ZipArchiveTest.java

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/ZipStreamArchive.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/ZipStreamArchive.java?rev=1866356&r1=1866355&r2=1866356&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/ZipStreamArchive.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/ZipStreamArchive.java Wed Sep  4 07:04:55 2019
@@ -135,23 +135,13 @@ public class ZipStreamArchive extends Ab
         inf = new DefaultMetaInf();
 
         // scan the zip and copy data to temporary file
-        ZipInputStream zin = new ZipInputStream(in);
-
-        try {
+        try (ZipInputStream zin = new ZipInputStream(in)) {
             ZipEntry entry;
             while ((entry = zin.getNextEntry()) != null) {
                 String name = entry.getName();
-                // check for meta inf
-                if (name.startsWith(Constants.META_DIR + "/")) {
-                    try {
-                        inf.load(new CloseShieldInputStream(zin), "inputstream:" + name);
-                    } catch (ConfigurationException e) {
-                        throw new IOException(e);
-                    }
-                }
                 String[] names = Text.explode(name, '/');
+                EntryImpl je = root;
                 if (names.length > 0) {
-                    EntryImpl je = root;
                     for (int i=0; i<names.length; i++) {
                         if (i == names.length -1 && !entry.isDirectory()) {
                             // copy stream
@@ -166,6 +156,15 @@ public class ZipStreamArchive extends Ab
                         log.debug("scanning jar: {}", name);
                     }
                 }
+                // extract meta information
+                if (name.startsWith(Constants.META_DIR + "/")) {
+                    try (InputStream input = createInputStream(je)) {
+                        // load from previous entryImpl
+                        inf.load(input, "inputstream:" + name);
+                    } catch (ConfigurationException e) {
+                        throw new IOException(e);
+                    }
+                }
             }
             if (inf.getFilter() == null) {
                 log.debug("Zip stream does not contain filter definition.");
@@ -185,8 +184,6 @@ public class ZipStreamArchive extends Ab
             if (inf.getNodeTypes().isEmpty()) {
                 log.debug("Zip stream does not contain nodetypes.");
             }
-        } finally {
-            IOUtils.closeQuietly(zin);
         }
     }
 

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/fs/io/ZipArchiveTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/fs/io/ZipArchiveTest.java?rev=1866356&r1=1866355&r2=1866356&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/fs/io/ZipArchiveTest.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/fs/io/ZipArchiveTest.java Wed Sep  4 07:04:55 2019
@@ -21,6 +21,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.Properties;
 
+import org.apache.jackrabbit.vault.fs.config.DefaultMetaInf;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
@@ -32,21 +33,27 @@ public class ZipArchiveTest {
 
     @Test
     public void testSmallArchiveViaStream() throws IOException {
-        InputStream in = getClass().getResourceAsStream("/org/apache/jackrabbit/vault/packaging/integration/testpackages/atomic-counter-test.zip");
-        ZipStreamArchive a = new ZipStreamArchive(in);
-        a.open(true);
-        Properties props = a.getMetaInf().getProperties();
-        assertEquals("Package Name", "atomic-counter-test", props.getProperty("name"));
-        a.close();
+        try (InputStream in = getClass().getResourceAsStream("/org/apache/jackrabbit/vault/packaging/integration/testpackages/atomic-counter-test.zip");
+             ZipStreamArchive a = new ZipStreamArchive(in)) {
+            a.open(true);
+            Properties props = a.getMetaInf().getProperties();
+            assertEquals("Package Name", "atomic-counter-test", props.getProperty("name"));
+            Archive.Entry entry = a.getEntry("META-INF/vault/properties.xml");
+            try (InputStream i = a.openInputStream(entry)) {
+                DefaultMetaInf metaInf = new DefaultMetaInf();
+                metaInf.loadProperties(i, "inputstream");
+                assertEquals("Package Name", "atomic-counter-test", metaInf.getProperties().getProperty("name"));
+            }
+        }
     }
 
     @Test
     public void testSmallArchiveViaFile() throws IOException {
         File file = new File(getClass().getResource("/org/apache/jackrabbit/vault/packaging/integration/testpackages/atomic-counter-test.zip").getFile());
-        ZipArchive a = new ZipArchive(file, false);
-        a.open(true);
-        Properties props = a.getMetaInf().getProperties();
-        assertEquals("Package Name", "atomic-counter-test", props.getProperty("name"));
-        a.close();
+        try (ZipArchive a = new ZipArchive(file, false)) {
+            a.open(true);
+            Properties props = a.getMetaInf().getProperties();
+            assertEquals("Package Name", "atomic-counter-test", props.getProperty("name"));
+        }
     }
 }
\ No newline at end of file