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/08/09 06:47:18 UTC

svn commit: r1864770 [1/2] - in /jackrabbit/commons/filevault/trunk: vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/ vault-cli/src/main/java/org/apache/jackrabbit/vault/util/console/ vault-cli/src/main/java/org/apache/jackrabbit/vault/util/con...

Author: kwin
Date: Fri Aug  9 06:47:17 2019
New Revision: 1864770

URL: http://svn.apache.org/viewvc?rev=1864770&view=rev
Log:
JCRVLT-349 clarify and consolidate closing behaviour for input/output
stream being passed to methods

The only remaining method which still closes a passed stream (given as
method argument) is PackageManager.assemble(...) and
PackageManager.rewrap(...).
Use try with resources.

Modified:
    jackrabbit/commons/filevault/trunk/vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/CmdImportCli.java
    jackrabbit/commons/filevault/trunk/vault-cli/src/main/java/org/apache/jackrabbit/vault/util/console/AbstractApplication.java
    jackrabbit/commons/filevault/trunk/vault-cli/src/main/java/org/apache/jackrabbit/vault/util/console/util/PomProperties.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/PropertyValueArtifact.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/SerializerArtifact.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/VaultFileCopy.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/VaultFileInputStream.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/api/Artifact.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/api/WorkspaceFilter.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/AbstractConfig.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/AbstractVaultFsConfig.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/DefaultMetaInf.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/DefaultWorkspaceFilter.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/SimpleCredentialsConfig.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/AbstractArtifact.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/AggregateManagerImpl.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/VaultFileOutputImpl.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/CNDSerializer.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/CompressionUtil.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/DocViewSAXImporter.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/NodeTypeArtifactHandler.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/AbstractExporter.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Importer.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/JarExporter.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/JcrArchive.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/JcrExporter.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/PlatformExporter.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Serializer.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/ZipArchive.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/ZipStreamArchive.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/PackageManager.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/VaultPackage.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageManagerImpl.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackageManagerImpl.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/InputStreamPump.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/MD5.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/SHA1.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/xml/serialize/BaseMarkupSerializer.java
    jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/xml/serialize/XMLSerializer.java
    jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestSpecialDoubleProperties.java
    jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/integration/TestSubPackages.java
    jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/packaging/registry/impl/FSRegisteredPackageTest.java
    jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/util/MD5Test.java
    jackrabbit/commons/filevault/trunk/vault-core/src/test/java/org/apache/jackrabbit/vault/util/SHA1Test.java

Modified: jackrabbit/commons/filevault/trunk/vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/CmdImportCli.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/CmdImportCli.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/CmdImportCli.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-cli/src/main/java/org/apache/jackrabbit/vault/cli/CmdImportCli.java Fri Aug  9 06:47:17 2019
@@ -84,13 +84,10 @@ public class CmdImportCli extends Abstra
                 return;
             }
             // todo: move to another location
-            InputStream ins = FileUtils.openInputStream(localFile);
-            try {
+            try (InputStream ins = FileUtils.openInputStream(localFile)) {
                 Session session = vCtx.getFileSystem(addr).getAggregateManager().getSession();
                 session.getWorkspace().importXML(jcrPath, ins, ImportUUIDBehavior.IMPORT_UUID_COLLISION_REMOVE_EXISTING);
                 return;
-            } finally {
-                IOUtils.closeQuietly(ins);
             }
         }
 

Modified: jackrabbit/commons/filevault/trunk/vault-cli/src/main/java/org/apache/jackrabbit/vault/util/console/AbstractApplication.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-cli/src/main/java/org/apache/jackrabbit/vault/util/console/AbstractApplication.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-cli/src/main/java/org/apache/jackrabbit/vault/util/console/AbstractApplication.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-cli/src/main/java/org/apache/jackrabbit/vault/util/console/AbstractApplication.java Fri Aug  9 06:47:17 2019
@@ -331,9 +331,9 @@ public abstract class AbstractApplicatio
             return;
         }
         Properties props = new Properties();
-        FileInputStream in = new FileInputStream(file);
-        props.load(in);
-        in.close();
+        try (FileInputStream in = new FileInputStream(file)) {
+            props.load(in);
+        }
         Iterator iter = globalEnv.keySet().iterator();
         while (iter.hasNext()) {
             String key = (String) iter.next();

Modified: jackrabbit/commons/filevault/trunk/vault-cli/src/main/java/org/apache/jackrabbit/vault/util/console/util/PomProperties.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-cli/src/main/java/org/apache/jackrabbit/vault/util/console/util/PomProperties.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-cli/src/main/java/org/apache/jackrabbit/vault/util/console/util/PomProperties.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-cli/src/main/java/org/apache/jackrabbit/vault/util/console/util/PomProperties.java Fri Aug  9 06:47:17 2019
@@ -46,11 +46,9 @@ public class PomProperties {
     public Properties getProperties() {
         if (props == null) {
             props = new Properties();
-            try {
-                InputStream in = PomProperties.class.getClassLoader().getResourceAsStream(pomPropsPath);
+            try (InputStream in = PomProperties.class.getClassLoader().getResourceAsStream(pomPropsPath)) {
                 if (in != null) {
                     props.load(in);
-                    in.close();
                 }
             } catch (IOException e) {
                 // ignore

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/PropertyValueArtifact.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/PropertyValueArtifact.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/PropertyValueArtifact.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/PropertyValueArtifact.java Fri Aug  9 06:47:17 2019
@@ -166,11 +166,10 @@ public class PropertyValueArtifact exten
             tmpFile = File.createTempFile("jcrfs", "dat");
             tmpFile.setLastModified(getLastModified());
             tmpFile.deleteOnExit();
-            FileOutputStream out = new FileOutputStream(tmpFile);
-            InputStream in = getValue().getStream();
-            IOUtils.copy(in, out);
-            in.close();
-            out.close();
+            try (FileOutputStream out = new FileOutputStream(tmpFile);
+                 InputStream in = getValue().getStream()) {
+                IOUtils.copy(in, out);
+            }
         }
     }
 

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/SerializerArtifact.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/SerializerArtifact.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/SerializerArtifact.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/SerializerArtifact.java Fri Aug  9 06:47:17 2019
@@ -97,13 +97,13 @@ public class SerializerArtifact extends
      * {@inheritDoc}
      */
     public InputStream getInputStream() throws IOException, RepositoryException {
-        DeferredFileOutputStream out = new DeferredFileOutputStream(8192, "vlttmp", ".tmp", null);
-        spool(out);
-        out.close();
-        if (out.isInMemory()) {
-            return new ByteArrayInputStream(out.getData());
-        } else {
-            return new TempFileInputStream(out.getFile());
+        try (DeferredFileOutputStream out = new DeferredFileOutputStream(8192, "vlttmp", ".tmp", null)) {
+            spool(out);
+            if (out.isInMemory()) {
+                return new ByteArrayInputStream(out.getData());
+            } else {
+                return new TempFileInputStream(out.getFile());
+            }
         }
     }
 
@@ -111,17 +111,18 @@ public class SerializerArtifact extends
      * {@inheritDoc}
      */
     public VaultInputSource getInputSource() throws IOException, RepositoryException {
-        DeferredFileOutputStream out = new DeferredFileOutputStream(8192, "vlttmp", ".tmp", null);
-        spool(out);
-        out.close();
         final InputStream in;
         final long size;
-        if (out.isInMemory()) {
-            in = new ByteArrayInputStream(out.getData());
-            size = out.getData().length;
-        } else {
-            in = new TempFileInputStream(out.getFile());
-            size = out.getFile().length();
+        try (DeferredFileOutputStream out = new DeferredFileOutputStream(8192, "vlttmp", ".tmp", null)) {
+            spool(out);
+        
+            if (out.isInMemory()) {
+                in = new ByteArrayInputStream(out.getData());
+                size = out.getData().length;
+            } else {
+                in = new TempFileInputStream(out.getFile());
+                size = out.getFile().length();
+            }
         }
         return new VaultInputSource() {
 

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/VaultFileCopy.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/VaultFileCopy.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/VaultFileCopy.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/VaultFileCopy.java Fri Aug  9 06:47:17 2019
@@ -97,24 +97,23 @@ public class VaultFileCopy {
         if (lineFeed != null) {
             base = new LineOutputStream(base, lineFeed);
         }
-        BinaryCheckOutputStream out = new BinaryCheckOutputStream(base);
-        switch (a.getPreferredAccess()) {
-            case SPOOL:
-                a.spool(out);
-                out.close();
-                break;
-            case STREAM:
-                InputStream in = a.getInputStream();
-                byte[] buffer = new byte[8192];
-                int read;
-                while ((read = in.read(buffer)) >= 0) {
-                    out.write(buffer, 0, read);
-                }
-                in.close();
-                out.close();
-                break;
+        try (BinaryCheckOutputStream out = new BinaryCheckOutputStream(base)) {
+            switch (a.getPreferredAccess()) {
+                case SPOOL:
+                    a.spool(out);
+                    break;
+                case STREAM:
+                    try (InputStream in = a.getInputStream()) {
+                        byte[] buffer = new byte[8192];
+                        int read;
+                        while ((read = in.read(buffer)) >= 0) {
+                            out.write(buffer, 0, read);
+                        }
+                    }
+                    break;
+            }
+            binary = out.isBinary();
         }
-        binary = out.isBinary();
         length = localFile.length();
         // try to set last modified
         long lastMod = remoteFile.lastModified();

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/VaultFileInputStream.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/VaultFileInputStream.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/VaultFileInputStream.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/VaultFileInputStream.java Fri Aug  9 06:47:17 2019
@@ -67,9 +67,9 @@ public class VaultFileInputStream extend
                 base = a.getInputStream();
             } else {
                 tmpFile = File.createTempFile("vltfs", ".spool");
-                FileOutputStream out = new FileOutputStream(tmpFile);
-                a.spool(out);
-                out.close();
+                try (FileOutputStream out = new FileOutputStream(tmpFile)) {
+                    a.spool(out);
+                }
                 base = new FileInputStream(tmpFile);
             }
         } catch (RepositoryException e) {

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/api/Artifact.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/api/Artifact.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/api/Artifact.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/api/Artifact.java Fri Aug  9 06:47:17 2019
@@ -117,7 +117,7 @@ public interface Artifact extends Dumpab
     /**
      * Writes the content to the given output stream and closes it afterwards.
      * This is the preferred method to use for output-artifacts.
-     *
+     * <p>The specified stream remains open after this method returns.
      * @param out the output stream to spool to
      * @throws IOException if an I/O error occurs
      * @throws RepositoryException if a repository error occurs

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/api/WorkspaceFilter.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/api/WorkspaceFilter.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/api/WorkspaceFilter.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/api/WorkspaceFilter.java Fri Aug  9 06:47:17 2019
@@ -100,6 +100,8 @@ public interface WorkspaceFilter extends
 
     /**
      * Returns the source xml that constructs this filter
+     * It is the obligation of the caller to close the returned input stream.
+     * 
      * @return the source xml
      */
     @Nonnull

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/AbstractConfig.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/AbstractConfig.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/AbstractConfig.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/AbstractConfig.java Fri Aug  9 06:47:17 2019
@@ -27,7 +27,6 @@ import javax.xml.parsers.DocumentBuilder
 import javax.xml.parsers.ParserConfigurationException;
 
 import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.vault.util.RejectingEntityResolver;
 import org.apache.jackrabbit.vault.util.xml.serialize.OutputFormat;
 import org.apache.jackrabbit.vault.util.xml.serialize.XMLSerializer;
@@ -84,9 +83,21 @@ abstract public class AbstractConfig {
     abstract protected void doLoad(Element child) throws ConfigurationException;
 
     public boolean load(File configFile) throws IOException, ConfigurationException {
-        return configFile.canRead() && load(FileUtils.openInputStream(configFile));
+        if (configFile.canRead()) {
+            try (InputStream input = FileUtils.openInputStream(configFile)) {
+                return true;
+            }
+        }
+        return false;
     }
 
+    /**
+     * <p>The specified stream remains open after this method returns.
+     * @param in
+     * @return
+     * @throws IOException
+     * @throws ConfigurationException
+     */
     public boolean load(InputStream in) throws IOException, ConfigurationException {
         try {
             DocumentBuilderFactory factory =
@@ -102,13 +113,13 @@ abstract public class AbstractConfig {
             throw new ConfigurationException(e);
         } catch (SAXException e) {
             throw new ConfigurationException(e);
-        } finally {
-            IOUtils.closeQuietly(in);
         }
     }
 
     public void save(File configFile) throws IOException {
-        save(FileUtils.openOutputStream(configFile));
+        try (OutputStream output = FileUtils.openOutputStream(configFile)) {
+            save(output);
+        }
     }
     
     public void save(OutputStream out) throws IOException {
@@ -120,8 +131,6 @@ abstract public class AbstractConfig {
             write(ser);
         } catch (SAXException e) {
             throw new IOException(e.toString());
-        } finally {
-            IOUtils.closeQuietly(out);
         }
     }
 

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/AbstractVaultFsConfig.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/AbstractVaultFsConfig.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/AbstractVaultFsConfig.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/AbstractVaultFsConfig.java Fri Aug  9 06:47:17 2019
@@ -70,38 +70,43 @@ public abstract class AbstractVaultFsCon
 
     public static VaultFsConfig load(File file)
             throws ConfigurationException, IOException {
-        return load(new FileInputStream(file), file.getName());
+        try (InputStream input = new FileInputStream(file)) {
+            return load(input, file.getName());
+        }
     }
 
+    /**
+     * <p>The specified stream remains open after this method returns.
+     * @param in
+     * @param name
+     * @return
+     * @throws ConfigurationException
+     * @throws IOException
+     */
     public static VaultFsConfig load(InputStream in, String name)
             throws ConfigurationException, IOException {
-        try {
-            byte[] source = IOUtils.toByteArray(in);
-            Document document = parse(new ByteArrayInputStream(source));
+        byte[] source = IOUtils.toByteArray(in);
+        Document document = parse(new ByteArrayInputStream(source));
 
-            Element doc = document.getDocumentElement();
-            if (!doc.getNodeName().equals("vaultfs")) {
-                throw new ConfigurationException("<vaultfs> expected.");
-            }
-            String v = doc.getAttribute(ATTR_VERSION);
-            if (v == null || v.equals("")) {
-                v = "1.0";
-            }
-            double version = Double.parseDouble(v);
-            AbstractVaultFsConfig config;
-            if (version != VaultFsConfig11.SUPPORTED_VERSION) {
-                throw new ConfigurationException("version " + version + " not supported.");
-            } else {
-                config = new VaultFsConfig11();
-            }
-            config.setSource(source);
-            config.setName(name);
-            config.process(doc);
-            return config;
-        } finally {
-            IOUtils.closeQuietly(in);
+        Element doc = document.getDocumentElement();
+        if (!doc.getNodeName().equals("vaultfs")) {
+            throw new ConfigurationException("<vaultfs> expected.");
         }
-
+        String v = doc.getAttribute(ATTR_VERSION);
+        if (v == null || v.equals("")) {
+            v = "1.0";
+        }
+        double version = Double.parseDouble(v);
+        AbstractVaultFsConfig config;
+        if (version != VaultFsConfig11.SUPPORTED_VERSION) {
+            throw new ConfigurationException("version " + version + " not supported.");
+        } else {
+            config = new VaultFsConfig11();
+        }
+        config.setSource(source);
+        config.setName(name);
+        config.process(doc);
+        return config;
     }
 
     protected Map<String, String> getProperties() {

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/DefaultMetaInf.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/DefaultMetaInf.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/DefaultMetaInf.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/DefaultMetaInf.java Fri Aug  9 06:47:17 2019
@@ -22,6 +22,7 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.io.OutputStream;
 import java.io.Reader;
 import java.util.Collection;
 import java.util.Collections;
@@ -35,6 +36,7 @@ import javax.jcr.NamespaceException;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.input.CloseShieldInputStream;
 import org.apache.jackrabbit.spi.commons.privilege.ParseException;
 import org.apache.jackrabbit.spi.commons.privilege.PrivilegeDefinitionReader;
 import org.apache.jackrabbit.vault.fs.api.VaultFsConfig;
@@ -93,6 +95,8 @@ public class DefaultMetaInf implements M
 
     /**
      * Loads a setting based on the name of the system id.
+     * <p>The specified stream remains open after this method returns.
+     * 
      * @param systemId the system id of the setting to load
      * @param in the input stream
      * @return {@code true} if the setting was loaded.
@@ -143,6 +147,15 @@ public class DefaultMetaInf implements M
         return false;
     }
 
+    /**
+     * 
+     * <p>The specified stream remains open after this method returns.
+     * 
+     * @param in
+     * @param systemId
+     * @throws ConfigurationException
+     * @throws IOException
+     */
     public void loadFilter(@Nonnull InputStream in, @Nonnull String systemId)
             throws ConfigurationException, IOException {
         DefaultWorkspaceFilter filter = new DefaultWorkspaceFilter();
@@ -151,6 +164,13 @@ public class DefaultMetaInf implements M
         log.trace("Loaded filter from {}.", systemId);
     }
 
+    /**
+     * <p>The specified stream remains open after this method returns.
+     * @param in
+     * @param systemId
+     * @throws ConfigurationException
+     * @throws IOException
+     */
     public void loadConfig(@Nonnull InputStream in, @Nonnull String systemId)
             throws ConfigurationException, IOException {
         VaultFsConfig config = AbstractVaultFsConfig.load(in, systemId);
@@ -166,14 +186,27 @@ public class DefaultMetaInf implements M
         log.trace("Loaded settings from {}.", systemId);
     }
 
+    /**
+     * <p>The specified stream remains open after this method returns.
+     * @param in
+     * @param systemId
+     * @throws IOException
+     */
     public void loadProperties(@Nonnull InputStream in, @Nonnull String systemId)
             throws IOException {
         Properties props = new Properties();
-        props.loadFromXML(in);
+        // prevent the input stream from being closed for achieving a consistens behaviour
+        props.loadFromXML(new CloseShieldInputStream(in));
         setProperties(props);
         log.trace("Loaded properties from {}.", systemId);
     }
 
+    /**
+     * <p>The specified stream remains open after this method returns.
+     * @param in
+     * @param systemId
+     * @throws IOException
+     */
     public void loadPrivileges(@Nonnull InputStream in, @Nonnull String systemId)
             throws IOException {
         try {
@@ -311,10 +344,9 @@ public class DefaultMetaInf implements M
             throws IOException {
         if (config != null) {
             File file = new File(metaDir, Constants.CONFIG_XML);
-            IOUtils.copy(
-                    config.getSource(),
-                    FileUtils.openOutputStream(file)
-            );
+            try (OutputStream output = FileUtils.openOutputStream(file)) {
+                IOUtils.copy(config.getSource(), output);
+            }
         }
     }
 
@@ -339,39 +371,37 @@ public class DefaultMetaInf implements M
             throws IOException {
         if (filter != null) {
             File file = new File(metaDir, Constants.FILTER_XML);
-            IOUtils.copy(
-                    filter.getSource(),
-                    FileUtils.openOutputStream(file)
-            );
+            try (OutputStream output = FileUtils.openOutputStream(file)) {
+                IOUtils.copy(filter.getSource(), output);
+            }
         }
     }
 
     protected void loadProperties(@Nonnull File metaDir) throws IOException {
         File file = new File(metaDir, Constants.PROPERTIES_XML);
         if (file.isFile()) {
-            Properties properties = new Properties();
-            properties.loadFromXML(FileUtils.openInputStream(file));
-            this.properties = properties;
+            try (InputStream input = FileUtils.openInputStream(file)) {
+                Properties properties = new Properties();
+                properties.loadFromXML(input);
+                this.properties = properties;
+            }
         }
     }
 
     protected void saveProperties(@Nonnull File metaDir) throws IOException {
         if (properties != null) {
             File file = new File(metaDir, Constants.PROPERTIES_XML);
-            properties.storeToXML(
-                    FileUtils.openOutputStream(file),
-                    "Custom Vault Properties", "utf-8");
+            try (OutputStream output = FileUtils.openOutputStream(file)) {
+                properties.storeToXML(output, "Custom Vault Properties", "utf-8");
+            }
         }
     }
 
     protected void loadPrivileges(@Nonnull File metaDir) throws IOException {
         File file = new File(metaDir, Constants.PRIVILEGES_XML);
         if (file.isFile()) {
-            InputStream in = FileUtils.openInputStream(file);
-            try {
+            try (InputStream in = FileUtils.openInputStream(file)) {
                 loadPrivileges(in, file.getPath());
-            } finally {
-                IOUtils.closeQuietly(in);
             }
         }
     }
@@ -383,17 +413,13 @@ public class DefaultMetaInf implements M
         }
         for (File file: files) {
             if (file.getName().endsWith(".cnd")) {
-                Reader r = null;
-                try {
-                    r = new InputStreamReader(new FileInputStream(file), "utf8");
+                try(Reader r = new InputStreamReader(new FileInputStream(file), "utf8")) {
                     CNDReader reader = ServiceProviderFactory.getProvider().getCNDReader();
                     reader.read(r, file.getName(), null);
                     cnds.add(reader);
                 } catch (IOException e) {
                     log.error("Error while reading CND: {}", e.toString());
                     throw new IOException("Error while reading CND.", e);
-                } finally {
-                    IOUtils.closeQuietly(r);
                 }
             }
         }

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/DefaultWorkspaceFilter.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/DefaultWorkspaceFilter.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/DefaultWorkspaceFilter.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/DefaultWorkspaceFilter.java Fri Aug  9 06:47:17 2019
@@ -294,7 +294,9 @@ public class DefaultWorkspaceFilter impl
      * @throws IOException if an I/O error occurs
      */
     public void load(File file) throws IOException, ConfigurationException {
-        load(new FileInputStream(file));
+        try (InputStream input = new FileInputStream(file)) {
+            load(input);
+        }
     }
 
     /**
@@ -322,22 +324,22 @@ public class DefaultWorkspaceFilter impl
     }
 
     /**
-     * Loads the workspace filter from the given input source
+     * Loads the workspace filter from the given input source.
+     * <p>The specified stream remains open after this method returns.
      * @param in source
      * @throws ConfigurationException if the source is not valid
      * @throws IOException if an I/O error occurs
      */
-    public void load(InputStream in) throws IOException, ConfigurationException {
-        try {
-            source = IOUtils.toByteArray(in);
-            in = getSource();
+    public void load(final InputStream in) throws IOException, ConfigurationException {
+        source = IOUtils.toByteArray(in);
+        try (InputStream inCopy = getSource()) {
             DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
             factory.setNamespaceAware(true);
             //factory.setFeature("http://xml.org/sax/features/namespace-prefixes", false);
             DocumentBuilder builder = factory.newDocumentBuilder();
             // disable DTD loading (bug #36897)
             builder.setEntityResolver(new RejectingEntityResolver());
-            Document document = builder.parse(in);
+            Document document = builder.parse(inCopy);
             Element doc = document.getDocumentElement();
             if (!"workspaceFilter".equals(doc.getNodeName())) {
                 throw new ConfigurationException("<workspaceFilter> expected.");
@@ -360,8 +362,6 @@ public class DefaultWorkspaceFilter impl
         } catch (SAXException e) {
             throw new ConfigurationException(
                     "Configuration file syntax error.", e);
-        } finally {
-            IOUtils.closeQuietly(in);
         }
 
     }

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/SimpleCredentialsConfig.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/SimpleCredentialsConfig.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/SimpleCredentialsConfig.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/config/SimpleCredentialsConfig.java Fri Aug  9 06:47:17 2019
@@ -148,11 +148,12 @@ public class SimpleCredentialsConfig ext
             }
             SecretKeySpec key = new SecretKeySpec(data, 0, KEY_LENGTH, "DES");
             Cipher cipher = Cipher.getInstance("DES");
-            ByteArrayOutputStream out = new ByteArrayOutputStream(data.length);
-            cipher.init(Cipher.DECRYPT_MODE, key);
-            out.write(cipher.update(data, KEY_LENGTH, data.length - KEY_LENGTH));
-            out.write(cipher.doFinal());
-            return out.toString("utf-8");
+            try (ByteArrayOutputStream out = new ByteArrayOutputStream(data.length)) {
+                cipher.init(Cipher.DECRYPT_MODE, key);
+                out.write(cipher.update(data, KEY_LENGTH, data.length - KEY_LENGTH));
+                out.write(cipher.doFinal());
+                return out.toString("utf-8");
+            }
         } catch (Exception e) {
             log.warn("Unable to decrypt data: " + e);
             return null;

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/AbstractArtifact.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/AbstractArtifact.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/AbstractArtifact.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/AbstractArtifact.java Fri Aug  9 06:47:17 2019
@@ -139,14 +139,13 @@ public abstract class AbstractArtifact i
      */
     public void spool(OutputStream out)
             throws IOException, RepositoryException {
-        InputStream in = getInputStream();
-        byte[] buffer = new byte[8192];
-        int read;
-        while ((read = in.read(buffer)) >= 0) {
-            out.write(buffer, 0, read);
+        try (InputStream in = getInputStream()) {
+            byte[] buffer = new byte[8192];
+            int read;
+            while ((read = in.read(buffer)) >= 0) {
+                out.write(buffer, 0, read);
+            }
         }
-        in.close();
-        out.close();
     }
 
     /**

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/AggregateManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/AggregateManagerImpl.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/AggregateManagerImpl.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/AggregateManagerImpl.java Fri Aug  9 06:47:17 2019
@@ -212,9 +212,8 @@ public class AggregateManagerImpl implem
      * @return the default config
      */
     public static VaultFsConfig getDefaultConfig() {
-        try {
-            InputStream in = AggregateManagerImpl.class.getClassLoader()
-                    .getResourceAsStream(DEFAULT_CONFIG);
+        try (InputStream in = AggregateManagerImpl.class.getClassLoader()
+                    .getResourceAsStream(DEFAULT_CONFIG)) {
             if (in == null) {
                 throw new InternalError("Default config not in classpath: " + DEFAULT_CONFIG);
             }
@@ -231,9 +230,8 @@ public class AggregateManagerImpl implem
      * @return the default config
      */
     public static VaultFsConfig getDefaultBinaryReferencesConfig() {
-        try {
-            InputStream in = AggregateManagerImpl.class.getClassLoader()
-                    .getResourceAsStream(DEFAULT_BINARY_REFERENCES_CONFIG);
+        try (InputStream in = AggregateManagerImpl.class.getClassLoader()
+                    .getResourceAsStream(DEFAULT_BINARY_REFERENCES_CONFIG)) {
             if (in == null) {
                 throw new InternalError("Default config not in classpath: " + DEFAULT_BINARY_REFERENCES_CONFIG);
             }
@@ -250,9 +248,8 @@ public class AggregateManagerImpl implem
      * @return the default workspace filter
      */
     public static DefaultWorkspaceFilter getDefaultWorkspaceFilter() {
-        try {
-            InputStream in = AggregateManagerImpl.class.getClassLoader()
-                    .getResourceAsStream(DEFAULT_WSP_FILTER);
+        try (InputStream in = AggregateManagerImpl.class.getClassLoader()
+                    .getResourceAsStream(DEFAULT_WSP_FILTER)) {
             if (in == null) {
                 throw new InternalError("Default filter not in classpath: " + DEFAULT_WSP_FILTER);
             }
@@ -437,17 +434,15 @@ public class AggregateManagerImpl implem
         } catch (RepositoryException e) {
             // ignore
         }
-        InputStream in = getClass().getClassLoader()
-                .getResourceAsStream(DEFAULT_NODETYPES);
-        try {
+        
+        try (InputStream in = getClass().getClassLoader()
+                .getResourceAsStream(DEFAULT_NODETYPES)) {
             NodeTypeInstaller installer = ServiceProviderFactory.getProvider().getDefaultNodeTypeInstaller(session);
             CNDReader types = ServiceProviderFactory.getProvider().getCNDReader();
             types.read(new InputStreamReader(in, "utf8"), DEFAULT_NODETYPES, null);
             installer.install(null, types);
         } catch (Exception e) {
             throw new RepositoryException("Error while importing nodetypes.", e);
-        } finally {
-            IOUtils.closeQuietly(in);
         }
     }
 

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/VaultFileOutputImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/VaultFileOutputImpl.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/VaultFileOutputImpl.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/VaultFileOutputImpl.java Fri Aug  9 06:47:17 2019
@@ -30,7 +30,7 @@ import org.apache.jackrabbit.vault.util.
 
 /**
  * Provides methods for writing jcr files. This can either be done by providing
- * an input source or by fetching an output stream. this output stream can be
+ * an input source or by fetching an output stream. This output stream can be
  * acquired via a {@link TransactionImpl}.
  *
  */
@@ -53,6 +53,10 @@ public class VaultFileOutputImpl impleme
         this.is = input;
     }
 
+    /**
+     * This method can only be called once.
+     * @return the returned output stream is implicitly closed via {@link #close()} and doesn't need to be closed.
+     */
     public OutputStream getOutputStream() throws IOException {
         if (out != null) {
             throw new IOException("Output stream already obtained.");

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/CNDSerializer.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/CNDSerializer.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/CNDSerializer.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/CNDSerializer.java Fri Aug  9 06:47:17 2019
@@ -27,6 +27,7 @@ import javax.jcr.NodeIterator;
 import javax.jcr.RepositoryException;
 import javax.jcr.Value;
 
+import org.apache.commons.io.output.CloseShieldOutputStream;
 import org.apache.jackrabbit.vault.fs.api.Aggregate;
 import org.apache.jackrabbit.vault.fs.api.SerializationType;
 import org.apache.jackrabbit.vault.fs.io.Serializer;
@@ -60,18 +61,18 @@ public class CNDSerializer implements Se
      * {@inheritDoc}
      */
     public void writeContent(OutputStream out) throws IOException, RepositoryException {
-        Writer w = new OutputStreamWriter(out, "utf-8");
-        for (String prefix: aggregate.getNamespacePrefixes()) {
-            w.write("<'");
-            w.write(prefix);
-            w.write("'='");
-            w.write(escape(aggregate.getNamespaceURI(prefix)));
-            w.write("'>\n");
+        try (Writer w = new OutputStreamWriter(new CloseShieldOutputStream(out), "utf-8")) {
+            for (String prefix: aggregate.getNamespacePrefixes()) {
+                w.write("<'");
+                w.write(prefix);
+                w.write("'='");
+                w.write(escape(aggregate.getNamespaceURI(prefix)));
+                w.write("'>\n");
+            }
+            w.write("\n");
+            
+            writeNodeTypeDef(w, aggregate.getNode());
         }
-        w.write("\n");
-        
-        writeNodeTypeDef(w, aggregate.getNode());
-        w.close();
         out.flush();
     }
 

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/CompressionUtil.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/CompressionUtil.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/CompressionUtil.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/CompressionUtil.java Fri Aug  9 06:47:17 2019
@@ -155,15 +155,11 @@ public final class CompressionUtil {
     }
 
     static int seemsCompressible(@Nonnull Artifact artifact) {
-        InputStream stream = null;
-        try {
-            stream = artifact.getInputStream();
+        try (InputStream stream = artifact.getInputStream()) {
             byte[] sample = IOUtils.toByteArray(stream, SAMPLE_LENGTH);
             return isCompressible(sample, SAMPLE_LENGTH) ? 1 : -1;
         } catch (RepositoryException | IOException e) {
             log.warn(e.getMessage(), e);
-        } finally {
-            IOUtils.closeQuietly(stream);
         }
         return 0;
     }

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/DocViewSAXImporter.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/DocViewSAXImporter.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/DocViewSAXImporter.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/DocViewSAXImporter.java Fri Aug  9 06:47:17 2019
@@ -18,6 +18,7 @@
 package org.apache.jackrabbit.vault.fs.impl.io;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.Collections;
@@ -446,22 +447,23 @@ public class DocViewSAXImporter extends
         boolean modified = false;
         // Set the jcr:data property
         ValueFactory factory = node.getSession().getValueFactory();
-        Value value = factory.createValue(a.getInputStream());
-        if (node.hasProperty(JcrConstants.JCR_DATA)) {
-            Property data = node.getProperty(JcrConstants.JCR_DATA);
-            if (!value.equals(data.getValue())) {
-                data.setValue(value);
-                // mark jcr:data as modified.
-                importInfo.onModified(data.getPath());
+        try (InputStream input = a.getInputStream()) {
+            Value value = factory.createValue(input);
+            if (node.hasProperty(JcrConstants.JCR_DATA)) {
+                Property data = node.getProperty(JcrConstants.JCR_DATA);
+                if (!value.equals(data.getValue())) {
+                    data.setValue(value);
+                    // mark jcr:data as modified.
+                    importInfo.onModified(data.getPath());
+                    modified = true;
+                }
+            } else {
+                Property data = node.setProperty(JcrConstants.JCR_DATA, value);
+                // mark jcr:data as created
+                importInfo.onCreated(data.getPath());
                 modified = true;
             }
-        } else {
-            Property data = node.setProperty(JcrConstants.JCR_DATA, value);
-            // mark jcr:data as created
-            importInfo.onCreated(data.getPath());
-            modified = true;
         }
-
         // always update last modified if binary was modified (bug #22969)
         if (!node.hasProperty(JcrConstants.JCR_LASTMODIFIED) || modified) {
             Calendar lastModified = Calendar.getInstance();
@@ -1271,7 +1273,9 @@ public class DocViewSAXImporter extends
             Value[] values = new Value[artifacts.size()];
             for (int i = 0; i < values.length; i++) {
                 Artifact a = artifacts.get(i);
-                values[i] = session.getValueFactory().createValue(a.getInputStream());
+                try (InputStream input = a.getInputStream()) {
+                    values[i] = session.getValueFactory().createValue(input);
+                }
             }
             return values;
         }
@@ -1279,7 +1283,9 @@ public class DocViewSAXImporter extends
         public Value getValue(Session session)
                 throws RepositoryException, IOException {
             Artifact a = artifacts.get(0);
-            return session.getValueFactory().createValue(a.getInputStream());
+            try (InputStream input = a.getInputStream()) {
+                return session.getValueFactory().createValue(input);
+            }
         }
 
         public void detach() {

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/NodeTypeArtifactHandler.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/NodeTypeArtifactHandler.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/NodeTypeArtifactHandler.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/impl/io/NodeTypeArtifactHandler.java Fri Aug  9 06:47:17 2019
@@ -65,12 +65,9 @@ public class NodeTypeArtifactHandler ext
         }
         // do import
         CNDImporter importer = new CNDImporter();
-        InputStream in = primary.getInputStream();
-        try {
+        try (InputStream in = primary.getInputStream()) {
             Reader r = new InputStreamReader(in, "utf-8");
             return importer.doImport(parent, primary.getRelativePath(), r, primary.getRelativePath());
-        } finally {
-            in.close();
         }
     }
 

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/AbstractExporter.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/AbstractExporter.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/AbstractExporter.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/AbstractExporter.java Fri Aug  9 06:47:17 2019
@@ -66,7 +66,7 @@ import static org.apache.jackrabbit.vaul
  * Generic context for exporters
  *
  */
-public abstract class AbstractExporter {
+public abstract class AbstractExporter implements AutoCloseable {
 
     /**
      * default logger
@@ -418,6 +418,12 @@ public abstract class AbstractExporter {
     public abstract void createDirectory(VaultFile file, String relPath)
             throws RepositoryException, IOException;
 
+    /**
+     * <p>The specified stream remains open after this method returns.
+     * @param in
+     * @param relPath
+     * @throws IOException
+     */
     public abstract void writeFile(InputStream in, String relPath)
             throws IOException;
 

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Importer.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Importer.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Importer.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Importer.java Fri Aug  9 06:47:17 2019
@@ -709,8 +709,7 @@ public class Importer {
                 } else if (".cnd".equals(ext)) {
                     if (opts.getCndPattern().matcher(repoPath).matches()) {
                         InputStream in = is.getByteStream();
-                        try {
-                            Reader r = new InputStreamReader(in, "utf8");
+                        try (Reader r = new InputStreamReader(in, "utf8")) {
                             CNDReader reader = ServiceProviderFactory.getProvider().getCNDReader();
                             // provide session namespaces
                             reader.read(r, is.getSystemId(), new NamespaceMapping(resolver));
@@ -718,8 +717,6 @@ public class Importer {
                             log.debug("Loaded nodetypes from {}.", repoPath);
                         } catch (IOException e1) {
                             log.error("Error while reading CND.", e1);
-                        } finally {
-                            IOUtils.closeQuietly(in);
                         }
                     }
                     ext = "";
@@ -1083,17 +1080,11 @@ public class Importer {
                 log.debug("Dry run: Would copy patch {} to {}", name, target.getPath());
             } else {
                 log.debug("Copying patch {} to {}", name, target.getPath());
-                InputStream in = null;
-                OutputStream out = null;
-                try {
-                    in = archive.getInputSource(e).getByteStream();
-                    out = FileUtils.openOutputStream(target);
+                try (InputStream in = archive.getInputSource(e).getByteStream();
+                     OutputStream out = FileUtils.openOutputStream(target)) {
                     IOUtils.copy(in, out);
                 } catch (IOException e1) {
                     log.error("Error while copying patch.", e);
-                } finally {
-                    IOUtils.closeQuietly(in);
-                    IOUtils.closeQuietly(out);
                 }
             }
             track("P", name);

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/JarExporter.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/JarExporter.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/JarExporter.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/JarExporter.java Fri Aug  9 06:47:17 2019
@@ -181,15 +181,13 @@ public class JarExporter extends Abstrac
                 throw new RepositoryException("Artifact has no content.");
 
             case SPOOL:
-                OutputStream nout = new CloseShieldOutputStream(jOut);
-                a.spool(nout);
+                a.spool(jOut);
                 break;
 
             case STREAM:
-                nout = new CloseShieldOutputStream(jOut);
-                InputStream in = a.getInputStream();
-                IOUtils.copy(in, nout);
-                in.close();
+                try (InputStream in = a.getInputStream()) {
+                    IOUtils.copy(in, jOut);
+                }
                 break;
         }
         jOut.closeEntry();
@@ -203,9 +201,7 @@ public class JarExporter extends Abstrac
         ZipEntry e = new ZipEntry(relPath);
         exportInfo.update(ExportInfo.Type.ADD, e.getName());
         jOut.putNextEntry(e);
-        OutputStream nout = new CloseShieldOutputStream(jOut);
-        IOUtils.copy(in, nout);
-        in.close();
+        IOUtils.copy(in, jOut);
         jOut.closeEntry();
     }
 
@@ -222,9 +218,9 @@ public class JarExporter extends Abstrac
         jOut.putNextEntry(copy);
         if (!entry.isDirectory()) {
             // copy
-            InputStream in = zip.getInputStream(entry);
-            IOUtils.copy(in, jOut);
-            in.close();
+            try (InputStream in = zip.getInputStream(entry)) {
+                IOUtils.copy(in, jOut);
+            }
         }
         jOut.closeEntry();
         if (changeCompressionLevel) {

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/JcrArchive.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/JcrArchive.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/JcrArchive.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/JcrArchive.java Fri Aug  9 06:47:17 2019
@@ -129,7 +129,9 @@ public class JcrArchive extends Abstract
         // filter
         for (Entry entry: dir.getChildren()) {
             VaultInputSource src = getInputSource(entry);
-            inf.load(src.getByteStream(), src.getSystemId());
+            try (InputStream input = src.getByteStream()) {
+                inf.load(input, src.getSystemId());
+            }
         }
         if (inf.getFilter() == null) {
             log.debug("Archive {} does not contain filter definition.", this);

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/JcrExporter.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/JcrExporter.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/JcrExporter.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/JcrExporter.java Fri Aug  9 06:47:17 2019
@@ -133,11 +133,11 @@ public class JcrExporter extends Abstrac
             case SPOOL:
                 // we can't support spool
             case STREAM:
-                InputStream in = a.getInputStream();
-                Binary b = content.getSession().getValueFactory().createBinary(in);
-                content.setProperty(JcrConstants.JCR_DATA, b);
-                b.dispose();
-                in.close();
+                try (InputStream in = a.getInputStream()) {
+                    Binary b = content.getSession().getValueFactory().createBinary(in);
+                    content.setProperty(JcrConstants.JCR_DATA, b);
+                    b.dispose();
+                }
                 break;
         }
         Calendar now = Calendar.getInstance();

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/PlatformExporter.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/PlatformExporter.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/PlatformExporter.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/PlatformExporter.java Fri Aug  9 06:47:17 2019
@@ -141,17 +141,16 @@ public class PlatformExporter extends Ab
                 throw new RepositoryException("Artifact has no content.");
 
             case SPOOL:
-                FileOutputStream out = new FileOutputStream(local);
-                a.spool(out);
-                out.close();
+                try (FileOutputStream out = new FileOutputStream(local)) {
+                    a.spool(out);
+                }
                 break;
 
             case STREAM:
-                InputStream in = a.getInputStream();
-                out = new FileOutputStream(local);
-                IOUtils.copy(in, out);
-                in.close();
-                out.close();
+                try (InputStream in = a.getInputStream();
+                     OutputStream out = new FileOutputStream(local)) {
+                    IOUtils.copy(in, out);
+                }
                 break;
         }
         if (a.getLastModified() >= 0) {

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Serializer.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Serializer.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Serializer.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/Serializer.java Fri Aug  9 06:47:17 2019
@@ -30,6 +30,12 @@ import org.apache.jackrabbit.vault.fs.ap
  */
 public interface Serializer {
 
+    /**
+     * <p>The specified stream remains open after this method returns.
+     * @param out
+     * @throws IOException
+     * @throws RepositoryException
+     */
     void writeContent(@Nonnull OutputStream out) throws IOException, RepositoryException;
 
     @Nonnull

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/ZipArchive.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/ZipArchive.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/ZipArchive.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/fs/io/ZipArchive.java Fri Aug  9 06:47:17 2019
@@ -110,8 +110,8 @@ public class ZipArchive extends Abstract
             String path = entry.getName();
             // check for meta inf
             if (path.startsWith(Constants.META_DIR + "/")) {
-                try {
-                    inf.load(jar.getInputStream(entry), file.getPath() + ":" + path);
+                try (InputStream input = jar.getInputStream(entry)) {
+                    inf.load(input, file.getPath() + ":" + path);
                 } catch (ConfigurationException e1) {
                     throw new IOException(e1);
                 }

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=1864770&r1=1864769&r2=1864770&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 Fri Aug  9 06:47:17 2019
@@ -106,7 +106,7 @@ public class ZipStreamArchive extends Ab
     private final byte[] buffer = new byte[0x10000];
 
     /**
-     * Creates an ew zip stream archive on the given input stream.
+     * Creates a new zip stream archive on the given input stream.
      * @param in the input stream to read from.
      */
     public ZipStreamArchive(@Nonnull InputStream in) {
@@ -273,6 +273,9 @@ public class ZipStreamArchive extends Ab
 
     @Override
     public void close() {
+        if (in != null) {
+            IOUtils.closeQuietly(in);
+        }
         if (raf != null) {
             try {
                 raf.close();

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/PackageManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/PackageManager.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/PackageManager.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/PackageManager.java Fri Aug  9 06:47:17 2019
@@ -108,7 +108,7 @@ public interface PackageManager {
     /**
      * Assembles a package using the given meta information. The package
      * is directly streamed to the given output stream.
-     *
+     * <p>The specified stream is closed after this method returns.
      * @param s the repository session
      * @param opts the export options
      * @param out the output stream to write to
@@ -138,6 +138,7 @@ public interface PackageManager {
     /**
      * Re-wraps the given package with the definition provided in the export
      * options.
+     * <p>The specified stream is closed after this method returns.
      * @param opts export options
      * @param src source package
      * @param out destination output stream

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/VaultPackage.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/VaultPackage.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/VaultPackage.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/VaultPackage.java Fri Aug  9 06:47:17 2019
@@ -93,12 +93,15 @@ public interface VaultPackage extends Pa
     File getFile();
 
     /**
-     * Closes this package and releases underlying data.
+     * Closes this package and releases underlying data. 
+     * This will also close the underlying {@link Archive} if it has been opened.
      */
     void close();
 
     /**
-     * Returns the underlying package archive
+     * Returns the underlying package archive.
+     * This does not need to be closed explicitly but rather is implicitly closed via
+     * a call to {@link #close()}.
      * @return the archive or {@code null} if already closed
      */
     Archive getArchive();

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/InstallHookProcessorImpl.java Fri Aug  9 06:47:17 2019
@@ -108,17 +108,12 @@ public class InstallHookProcessorImpl im
         File jarFile = File.createTempFile("vaulthook", ".jar");
         Hook hook = new Hook(input.getSystemId(), jarFile, classLoader);
 
-        OutputStream out = null;
-        InputStream in = input.getByteStream();
-        try {
-            out = FileUtils.openOutputStream(jarFile);
+        try (OutputStream out = FileUtils.openOutputStream(jarFile);
+             InputStream in = input.getByteStream()) {
             IOUtils.copy(in, out);
         } catch (IOException e) {
             hook.destroy();
             throw e;
-        } finally {
-            IOUtils.closeQuietly(in);
-            IOUtils.closeQuietly(out);
         }
         initHook(hook);
     }

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageManagerImpl.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageManagerImpl.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/JcrPackageManagerImpl.java Fri Aug  9 06:47:17 2019
@@ -215,10 +215,10 @@ public class JcrPackageManagerImpl exten
             for (Archive.Entry e: spfArchive.getSubPackageEntries()) {
                 InputStream in = spfArchive.openInputStream(e);
                 if (in != null) {
-                    Archive subArchive = new ZipStreamArchive(in);
-                    PackageId[] subIds = extract(subArchive, options, replace);
-                    ids.addAll(Arrays.asList(subIds));
-                    subArchive.close();
+                    try (Archive subArchive = new ZipStreamArchive(in)) {
+                        PackageId[] subIds = extract(subArchive, options, replace);
+                        ids.addAll(Arrays.asList(subIds));
+                    }
                 }
             }
         }
@@ -360,18 +360,17 @@ public class JcrPackageManagerImpl exten
 
         // update this content
         Node contentNode = packNode.getNode(JcrConstants.JCR_CONTENT);
-        InputStream in;
-        try {
-            in = FileUtils.openInputStream(pack.getFile());
+        
+        try (InputStream in = FileUtils.openInputStream(pack.getFile())){
+            // stay jcr 1.0 compatible
+            //noinspection deprecation
+            contentNode.setProperty(JcrConstants.JCR_DATA, in);
+            contentNode.setProperty(JcrConstants.JCR_LASTMODIFIED, now);
+            contentNode.setProperty(JcrConstants.JCR_MIMETYPE, JcrPackage.MIME_TYPE);
+            packNode.getSession().save();
         } catch (IOException e) {
             throw new PackageException(e);
         }
-        // stay jcr 1.0 compatible
-        //noinspection deprecation
-        contentNode.setProperty(JcrConstants.JCR_DATA, in);
-        contentNode.setProperty(JcrConstants.JCR_LASTMODIFIED, now);
-        contentNode.setProperty(JcrConstants.JCR_MIMETYPE, JcrPackage.MIME_TYPE);
-        packNode.getSession().save();
         pack.close();
         dispatch(PackageEvent.Type.ASSEMBLE, id, null);
     }

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackageManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackageManagerImpl.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackageManagerImpl.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/packaging/impl/PackageManagerImpl.java Fri Aug  9 06:47:17 2019
@@ -37,13 +37,10 @@ import javax.jcr.Session;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.jackrabbit.vault.fs.Mounter;
-import org.apache.jackrabbit.vault.fs.api.PathFilterSet;
 import org.apache.jackrabbit.vault.fs.api.RepositoryAddress;
 import org.apache.jackrabbit.vault.fs.api.VaultFileSystem;
 import org.apache.jackrabbit.vault.fs.api.VaultFsConfig;
-import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
 import org.apache.jackrabbit.vault.fs.config.DefaultMetaInf;
-import org.apache.jackrabbit.vault.fs.config.DefaultWorkspaceFilter;
 import org.apache.jackrabbit.vault.fs.config.MetaInf;
 import org.apache.jackrabbit.vault.fs.impl.AggregateManagerImpl;
 import org.apache.jackrabbit.vault.fs.io.JarExporter;
@@ -57,9 +54,6 @@ import org.apache.jackrabbit.vault.packa
 import org.apache.jackrabbit.vault.packaging.events.impl.PackageEventDispatcher;
 import org.apache.jackrabbit.vault.util.Constants;
 
-import static org.apache.jackrabbit.vault.packaging.registry.impl.JcrPackageRegistry.DEFAULT_PACKAGE_ROOT_PATH;
-import static org.apache.jackrabbit.vault.packaging.registry.impl.JcrPackageRegistry.DEFAULT_PACKAGE_ROOT_PATH_PREFIX;
-
 /**
  * Implements the package manager
  */
@@ -191,57 +185,57 @@ public class PackageManagerImpl implemen
         if (metaInf == null) {
             metaInf = new DefaultMetaInf();
         }
-        JarExporter exporter = new JarExporter(out, opts.getCompressionLevel());
-        exporter.open();
-        exporter.setProperties(metaInf.getProperties());
-        ProgressTracker tracker = null;
-        if (opts.getListener() != null) {
-            tracker = new ProgressTracker();
-            exporter.setVerbose(opts.getListener());
-        }
-
-        // merge
-        MetaInf inf = opts.getMetaInf();
-        ZipFile zip = new ZipFile(src.getFile(), ZipFile.OPEN_READ);
-        if (opts.getPostProcessor() == null) {
-            // no post processor, we keep all files except the properties
-            Enumeration e = zip.entries();
-            while (e.hasMoreElements()) {
-                ZipEntry entry = (ZipEntry) e.nextElement();
-                String path = entry.getName();
-                if (!path.equals(Constants.META_DIR + "/" + Constants.PROPERTIES_XML)) {
-                    exporter.write(zip, entry);
+        try (JarExporter exporter = new JarExporter(out, opts.getCompressionLevel())) {
+            exporter.open();
+            exporter.setProperties(metaInf.getProperties());
+            ProgressTracker tracker = null;
+            if (opts.getListener() != null) {
+                tracker = new ProgressTracker();
+                exporter.setVerbose(opts.getListener());
+            }
+    
+            // merge
+            MetaInf inf = opts.getMetaInf();
+            try (ZipFile zip = new ZipFile(src.getFile(), ZipFile.OPEN_READ)) {
+                if (opts.getPostProcessor() == null) {
+                    // no post processor, we keep all files except the properties
+                    Enumeration<? extends ZipEntry> e = zip.entries();
+                    while (e.hasMoreElements()) {
+                        ZipEntry entry = (ZipEntry) e.nextElement();
+                        String path = entry.getName();
+                        if (!path.equals(Constants.META_DIR + "/" + Constants.PROPERTIES_XML)) {
+                            exporter.write(zip, entry);
+                        }
+                    }
+                } else {
+                    Set<String> keep = new HashSet<String>();
+                    keep.add(Constants.META_DIR + "/");
+                    keep.add(Constants.META_DIR + "/" + Constants.NODETYPES_CND);
+                    keep.add(Constants.META_DIR + "/" + Constants.CONFIG_XML);
+                    keep.add(Constants.META_DIR + "/" + Constants.FILTER_XML);
+                    Enumeration<? extends ZipEntry> e = zip.entries();
+                    while (e.hasMoreElements()) {
+                        ZipEntry entry = (ZipEntry) e.nextElement();
+                        String path = entry.getName();
+                        if (!path.startsWith(Constants.META_DIR + "/") || keep.contains(path)) {
+                            exporter.write(zip, entry);
+                        }
+                    }
                 }
             }
-        } else {
-            Set<String> keep = new HashSet<String>();
-            keep.add(Constants.META_DIR + "/");
-            keep.add(Constants.META_DIR + "/" + Constants.NODETYPES_CND);
-            keep.add(Constants.META_DIR + "/" + Constants.CONFIG_XML);
-            keep.add(Constants.META_DIR + "/" + Constants.FILTER_XML);
-            Enumeration e = zip.entries();
-            while (e.hasMoreElements()) {
-                ZipEntry entry = (ZipEntry) e.nextElement();
-                String path = entry.getName();
-                if (!path.startsWith(Constants.META_DIR + "/") || keep.contains(path)) {
-                    exporter.write(zip, entry);
-                }
+    
+            // write updated properties
+            ByteArrayOutputStream tmpOut = new ByteArrayOutputStream();
+            inf.getProperties().storeToXML(tmpOut, "FileVault Package Properties", "utf-8");
+            exporter.writeFile(new ByteArrayInputStream(tmpOut.toByteArray()), Constants.META_DIR + "/" + Constants.PROPERTIES_XML);
+            if (tracker != null) {
+                tracker.track("A", Constants.META_DIR + "/" + Constants.PROPERTIES_XML);
+            }
+    
+            if (opts.getPostProcessor() != null) {
+                opts.getPostProcessor().process(exporter);
             }
         }
-        zip.close();
-
-        // write updated properties
-        ByteArrayOutputStream tmpOut = new ByteArrayOutputStream();
-        inf.getProperties().storeToXML(tmpOut, "FileVault Package Properties", "utf-8");
-        exporter.writeFile(new ByteArrayInputStream(tmpOut.toByteArray()), Constants.META_DIR + "/" + Constants.PROPERTIES_XML);
-        if (tracker != null) {
-            tracker.track("A", Constants.META_DIR + "/" + Constants.PROPERTIES_XML);
-        }
-
-        if (opts.getPostProcessor() != null) {
-            opts.getPostProcessor().process(exporter);
-        }
-        exporter.close();
     }
 
     @Nullable

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/InputStreamPump.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/InputStreamPump.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/InputStreamPump.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/InputStreamPump.java Fri Aug  9 06:47:17 2019
@@ -68,6 +68,11 @@ public class InputStreamPump extends Inp
     }
 
     public interface Pump {
+        /**
+         * <p>The specified stream remains open after this method returns.
+         * @param in
+         * @throws Exception
+         */
         void run(InputStream in) throws Exception;
     }
 

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/MD5.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/MD5.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/MD5.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/MD5.java Fri Aug  9 06:47:17 2019
@@ -76,26 +76,24 @@ public class MD5 {
     }
 
     public static MD5 digest(InputStream in) throws IOException {
+        MessageDigest md;
         try {
-            MessageDigest md;
-            try {
-                md = MessageDigest.getInstance("md5");
-            } catch (NoSuchAlgorithmException e) {
-                throw new IllegalArgumentException(e.toString());
-            }
-            byte[] buffer = new byte[8192];
-            int read;
-            while ((read = in.read(buffer)) > 0) {
-                md.update(buffer, 0, read);
-            }
-            return new MD5(md.digest());
-        } finally {
-            in.close();
+            md = MessageDigest.getInstance("md5");
+        } catch (NoSuchAlgorithmException e) {
+            throw new IllegalArgumentException(e.toString());
         }
+        byte[] buffer = new byte[8192];
+        int read;
+        while ((read = in.read(buffer)) > 0) {
+            md.update(buffer, 0, read);
+        }
+        return new MD5(md.digest());
     }
 
     public static MD5 digest(File file) throws IOException {
-        return digest(new FileInputStream(file));
+        try (InputStream input = new FileInputStream(file)) {
+            return digest(input);
+        }
     }
 
     public String toString() {

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/SHA1.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/SHA1.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/SHA1.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/SHA1.java Fri Aug  9 06:47:17 2019
@@ -87,26 +87,24 @@ public class SHA1 {
     }
 
     public static SHA1 digest(InputStream in) throws IOException {
+        MessageDigest md;
         try {
-            MessageDigest md;
-            try {
-                md = MessageDigest.getInstance("SHA-1");
-            } catch (NoSuchAlgorithmException e) {
-                throw new IllegalArgumentException(e.toString());
-            }
-            byte[] buffer = new byte[8192];
-            int read;
-            while ((read = in.read(buffer)) > 0) {
-                md.update(buffer, 0, read);
-            }
-            return new SHA1(md.digest());
-        } finally {
-            in.close();
+            md = MessageDigest.getInstance("SHA-1");
+        } catch (NoSuchAlgorithmException e) {
+            throw new IllegalArgumentException(e.toString());
         }
+        byte[] buffer = new byte[8192];
+        int read;
+        while ((read = in.read(buffer)) > 0) {
+            md.update(buffer, 0, read);
+        }
+        return new SHA1(md.digest());
     }
 
     public static SHA1 digest(File file) throws IOException {
-        return digest(FileUtils.openInputStream(file));
+        try (InputStream input = FileUtils.openInputStream(file)) {
+            return digest(input);
+        }
     }
 
     public String toString() {

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/xml/serialize/BaseMarkupSerializer.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/xml/serialize/BaseMarkupSerializer.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/xml/serialize/BaseMarkupSerializer.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/xml/serialize/BaseMarkupSerializer.java Fri Aug  9 06:47:17 2019
@@ -275,7 +275,9 @@ public abstract class BaseMarkupSerializ
         return this;
     }
 
-
+    /**
+     * <p>The specified stream will not be closed by this class.
+     */
     public void setOutputByteStream(OutputStream output) {
         if (output == null) {
             String msg = DOMMessageFormatter.formatMessage(DOMMessageFormatter.SERIALIZER_DOMAIN,
@@ -288,6 +290,9 @@ public abstract class BaseMarkupSerializ
     }
 
 
+    /**
+     * <p>The specified writer will not be closed by this class.
+     */
     public void setOutputCharStream(Writer writer) {
         if (writer == null) {
             String msg = DOMMessageFormatter.formatMessage(DOMMessageFormatter.SERIALIZER_DOMAIN,

Modified: jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/xml/serialize/XMLSerializer.java
URL: http://svn.apache.org/viewvc/jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/xml/serialize/XMLSerializer.java?rev=1864770&r1=1864769&r2=1864770&view=diff
==============================================================================
--- jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/xml/serialize/XMLSerializer.java (original)
+++ jackrabbit/commons/filevault/trunk/vault-core/src/main/java/org/apache/jackrabbit/vault/util/xml/serialize/XMLSerializer.java Fri Aug  9 06:47:17 2019
@@ -175,8 +175,11 @@ public class XMLSerializer extends BaseM
      * using the specified output format. If <tt>format</tt> is null,
      * will use a default output format.
      *
+     * <p>The specified writer will not be closed by this class.
+     * 
      * @param writer The writer to use
      * @param format The output format to use, null for the default
+     * 
      */
     public XMLSerializer(Writer writer, OutputFormat format) {
         super(format != null ? format : new OutputFormat(Method.XML, null, false));
@@ -189,7 +192,8 @@ public class XMLSerializer extends BaseM
      * Constructs a new serializer that writes to the specified output
      * stream using the specified output format. If <tt>format</tt>
      * is null, will use a default output format.
-     *
+     * <p>The specified stream will not be closed by this class.
+     * 
      * @param output The output stream to use
      * @param format The output format to use, null for the default
      */