You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ti...@apache.org on 2024/08/10 12:34:12 UTC

(tika) 02/03: TIKA-4290: replace deprecated

This is an automated email from the ASF dual-hosted git repository.

tilman pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tika.git

commit cf81abab692301d4b5013126b1c64e8f59cf3a08
Author: Tilman Hausherr <ti...@apache.org>
AuthorDate: Sat Aug 10 14:27:24 2024 +0200

    TIKA-4290: replace deprecated
---
 .../src/main/java/org/apache/tika/gui/TikaGUI.java |  9 +--
 .../test/java/org/apache/tika/bundle/BundleIT.java |  2 +-
 .../org/apache/tika/eval/app/reports/Report.java   |  2 +-
 .../java/org/apache/tika/example/MyFirstTika.java  |  7 ++-
 .../org/apache/tika/example/TIAParsingExample.java |  4 +-
 .../tika/parser/sqlite3/SQLite3ParserTest.java     |  3 +-
 .../tika/parser/pot/PooledTimeSeriesParser.java    |  5 +-
 .../org/apache/tika/parser/mbox/MboxParser.java    |  4 +-
 .../apache/tika/parser/ocr/ImagePreprocessor.java  |  2 +-
 .../org/apache/tika/parser/pkg/ZipParserTest.java  |  3 +-
 .../tika/pipes/emitter/azblob/AZBlobEmitter.java   | 17 +++---
 .../tika/pipes/fetcher/azblob/AZBlobFetcher.java   |  6 +-
 .../org/apache/tika/server/core/CXFTestBase.java   | 71 ++++++++++++----------
 13 files changed, 71 insertions(+), 64 deletions(-)

diff --git a/tika-app/src/main/java/org/apache/tika/gui/TikaGUI.java b/tika-app/src/main/java/org/apache/tika/gui/TikaGUI.java
index 30c02beed..41ed93232 100644
--- a/tika-app/src/main/java/org/apache/tika/gui/TikaGUI.java
+++ b/tika-app/src/main/java/org/apache/tika/gui/TikaGUI.java
@@ -284,7 +284,7 @@ public class TikaGUI extends JFrame implements ActionListener, HyperlinkListener
     public void openFile(File file) {
         try {
             Metadata metadata = new Metadata();
-            try (TikaInputStream stream = TikaInputStream.get(file, metadata)) {
+            try (TikaInputStream stream = TikaInputStream.get(file.toPath(), metadata)) {
                 handleStream(stream, metadata);
             }
         } catch (Throwable t) {
@@ -629,12 +629,13 @@ public class TikaGUI extends JFrame implements ActionListener, HyperlinkListener
             return downstreamParser.getSupportedTypes(context);
         }
 
+        @Override
         public void parse(InputStream stream, ContentHandler handler, Metadata metadata, ParseContext context) throws IOException, SAXException, TikaException {
             String name = metadata.get(TikaCoreProperties.RESOURCE_NAME_KEY);
             if (name != null && wanted.containsKey(name)) {
-                FileOutputStream out = new FileOutputStream(wanted.get(name));
-                IOUtils.copy(stream, out);
-                out.close();
+                try (FileOutputStream out = new FileOutputStream(wanted.get(name))) {
+                    IOUtils.copy(stream, out);
+                }
             } else {
                 if (downstreamParser != null) {
                     downstreamParser.parse(stream, handler, metadata, context);
diff --git a/tika-bundles/tika-bundle-standard/src/test/java/org/apache/tika/bundle/BundleIT.java b/tika-bundles/tika-bundle-standard/src/test/java/org/apache/tika/bundle/BundleIT.java
index 4900ad76b..58d3f8aae 100644
--- a/tika-bundles/tika-bundle-standard/src/test/java/org/apache/tika/bundle/BundleIT.java
+++ b/tika-bundles/tika-bundle-standard/src/test/java/org/apache/tika/bundle/BundleIT.java
@@ -340,7 +340,7 @@ public class BundleIT {
             }
             System.out.println("about to parse " + f);
             Metadata metadata = new Metadata();
-            try (InputStream is = TikaInputStream.get(f)) {
+            try (InputStream is = TikaInputStream.get(f.toPath())) {
                 parser.parse(is, handler, metadata, context);
             } catch (EncryptedDocumentException e) {
                 //swallow
diff --git a/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/reports/Report.java b/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/reports/Report.java
index 8186ec275..b1b886217 100644
--- a/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/reports/Report.java
+++ b/tika-eval/tika-eval-app/src/main/java/org/apache/tika/eval/app/reports/Report.java
@@ -82,7 +82,7 @@ public class Report {
                 try (OutputStream os = Files.newOutputStream(out)) {
                     wb.write(os);
                 } finally {
-                    wb.dispose();
+                    wb.close();
                 }
             }
         }
diff --git a/tika-example/src/main/java/org/apache/tika/example/MyFirstTika.java b/tika-example/src/main/java/org/apache/tika/example/MyFirstTika.java
index fff96bc19..54efda350 100755
--- a/tika-example/src/main/java/org/apache/tika/example/MyFirstTika.java
+++ b/tika-example/src/main/java/org/apache/tika/example/MyFirstTika.java
@@ -21,6 +21,7 @@ import static java.nio.charset.StandardCharsets.UTF_8;
 
 import java.io.File;
 import java.io.InputStream;
+import java.nio.file.Paths;
 
 import org.apache.commons.io.FileUtils;
 import org.xml.sax.ContentHandler;
@@ -74,7 +75,7 @@ public class MyFirstTika {
 
         AutoDetectParser parser = new AutoDetectParser(tikaConfig);
         ContentHandler handler = new BodyContentHandler();
-        TikaInputStream stream = TikaInputStream.get(new File(filename), metadata);
+        TikaInputStream stream = TikaInputStream.get(Paths.get(filename), metadata);
         parser.parse(stream, handler, metadata, new ParseContext());
         return handler.toString();
     }
@@ -87,10 +88,10 @@ public class MyFirstTika {
         metadata.set(TikaCoreProperties.RESOURCE_NAME_KEY, filename);
         System.out.println("The MIME type (based on filename) is: [" + mimeRegistry.detect(null, metadata) + "]");
 
-        InputStream stream = TikaInputStream.get(new File(filename));
+        InputStream stream = TikaInputStream.get(Paths.get(filename));
         System.out.println("The MIME type (based on MAGIC) is: [" + mimeRegistry.detect(stream, metadata) + "]");
 
-        stream = TikaInputStream.get(new File(filename));
+        stream = TikaInputStream.get(Paths.get(filename));
         Detector detector = tikaConfig.getDetector();
         System.out.println("The MIME type (based on the Detector interface) is: [" + detector.detect(stream, metadata) + "]");
 
diff --git a/tika-example/src/main/java/org/apache/tika/example/TIAParsingExample.java b/tika-example/src/main/java/org/apache/tika/example/TIAParsingExample.java
index d2ba1a8b5..44b514c65 100755
--- a/tika-example/src/main/java/org/apache/tika/example/TIAParsingExample.java
+++ b/tika-example/src/main/java/org/apache/tika/example/TIAParsingExample.java
@@ -102,13 +102,13 @@ public class TIAParsingExample {
         ContentHandler handler = new DefaultHandler();
         Metadata metadata = new Metadata();
         ParseContext context = new ParseContext();
-        try (InputStream stream = TikaInputStream.get(new File(filename))) {
+        try (InputStream stream = TikaInputStream.get(Paths.get(filename))) {
             parser.parse(stream, handler, metadata, context);
         }
     }
 
     public static File tikaInputStreamGetFile(String filename) throws Exception {
-        try (InputStream stream = TikaInputStream.get(new File(filename))) {
+        try (InputStream stream = TikaInputStream.get(Paths.get(filename))) {
             TikaInputStream tikaInputStream = TikaInputStream.get(stream);
             return tikaInputStream.getFile();
         }
diff --git a/tika-parsers/tika-parsers-extended/tika-parsers-extended-integration-tests/src/test/java/org/apache/tika/parser/sqlite3/SQLite3ParserTest.java b/tika-parsers/tika-parsers-extended/tika-parsers-extended-integration-tests/src/test/java/org/apache/tika/parser/sqlite3/SQLite3ParserTest.java
index c9be6db27..65e752bc1 100644
--- a/tika-parsers/tika-parsers-extended/tika-parsers-extended-integration-tests/src/test/java/org/apache/tika/parser/sqlite3/SQLite3ParserTest.java
+++ b/tika-parsers/tika-parsers-extended/tika-parsers-extended-integration-tests/src/test/java/org/apache/tika/parser/sqlite3/SQLite3ParserTest.java
@@ -68,7 +68,7 @@ public class SQLite3ParserTest extends TikaTest {
             }
         }
         try (TikaInputStream outer = TikaInputStream.get(getResourceAsStream(TEST_FILE1))) {
-            try (TikaInputStream inner = TikaInputStream.get(outer.getFile())) {
+            try (TikaInputStream inner = TikaInputStream.get(outer.getPath())) {
                 _testBasic(inner);
             }
         }
@@ -143,7 +143,6 @@ public class SQLite3ParserTest extends TikaTest {
             wrapper.parse(is, handler, metadata, new ParseContext());
         }
         List<Metadata> metadataList = handler.getMetadataList();
-        int i = 0;
         assertEquals(5, metadataList.size());
         //make sure the \t are inserted in a body handler
 
diff --git a/tika-parsers/tika-parsers-ml/tika-parser-advancedmedia-module/src/main/java/org/apache/tika/parser/pot/PooledTimeSeriesParser.java b/tika-parsers/tika-parsers-ml/tika-parser-advancedmedia-module/src/main/java/org/apache/tika/parser/pot/PooledTimeSeriesParser.java
index 7f61963eb..ceaec071d 100644
--- a/tika-parsers/tika-parsers-ml/tika-parser-advancedmedia-module/src/main/java/org/apache/tika/parser/pot/PooledTimeSeriesParser.java
+++ b/tika-parsers/tika-parsers-ml/tika-parser-advancedmedia-module/src/main/java/org/apache/tika/parser/pot/PooledTimeSeriesParser.java
@@ -25,6 +25,7 @@ import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.time.Duration;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashSet;
@@ -160,9 +161,9 @@ public class PooledTimeSeriesParser implements Parser {
             cmdLine.addArgument("-f");
             cmdLine.addArgument(input.getAbsolutePath());
             LOG.trace("Executing: {}", cmdLine);
-            DefaultExecutor exec = new DefaultExecutor();
+            DefaultExecutor exec = DefaultExecutor.builder().get();
             exec.setExitValue(0);
-            ExecuteWatchdog watchdog = new ExecuteWatchdog(60000);
+            ExecuteWatchdog watchdog = ExecuteWatchdog.builder().setTimeout(Duration.ofMillis(60000)).get();
             exec.setWatchdog(watchdog);
             PumpStreamHandler streamHandler = new PumpStreamHandler(outputStream);
             exec.setStreamHandler(streamHandler);
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-mail-module/src/main/java/org/apache/tika/parser/mbox/MboxParser.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-mail-module/src/main/java/org/apache/tika/parser/mbox/MboxParser.java
index b66c87be4..4c7bea74c 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-mail-module/src/main/java/org/apache/tika/parser/mbox/MboxParser.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-mail-module/src/main/java/org/apache/tika/parser/mbox/MboxParser.java
@@ -73,10 +73,12 @@ public class MboxParser implements Parser {
     private boolean tracking = false;
 
 
+    @Override
     public Set<MediaType> getSupportedTypes(ParseContext context) {
         return SUPPORTED_TYPES;
     }
 
+    @Override
     public void parse(InputStream stream, ContentHandler handler, Metadata metadata,
                       ParseContext context) throws IOException, TikaException, SAXException {
 
@@ -108,7 +110,7 @@ public class MboxParser implements Parser {
                     if (curLine == null) {
                         break;
                     }
-                    UnsynchronizedByteArrayOutputStream message = new UnsynchronizedByteArrayOutputStream(100000);
+                    UnsynchronizedByteArrayOutputStream message = UnsynchronizedByteArrayOutputStream.builder().setBufferSize(100000).get();
                     do {
                         if (curLine.startsWith(" ") || curLine.startsWith("\t")) {
                             String latestLine = multiline.poll();
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-ocr-module/src/main/java/org/apache/tika/parser/ocr/ImagePreprocessor.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-ocr-module/src/main/java/org/apache/tika/parser/ocr/ImagePreprocessor.java
index 0bf3fbc2e..0473f3bed 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-ocr-module/src/main/java/org/apache/tika/parser/ocr/ImagePreprocessor.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-ocr-module/src/main/java/org/apache/tika/parser/ocr/ImagePreprocessor.java
@@ -95,7 +95,7 @@ class ImagePreprocessor implements Serializable {
             }
             final String[] args = stream.flatMap(Collection::stream).toArray(String[]::new);
             commandLine.addArguments(args, true);
-            DefaultExecutor executor = new DefaultExecutor();
+            DefaultExecutor executor = DefaultExecutor.builder().get();
             try {
                 executor.execute(commandLine);
             } catch (SecurityException e) {
diff --git a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pkg-module/src/test/java/org/apache/tika/parser/pkg/ZipParserTest.java b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pkg-module/src/test/java/org/apache/tika/parser/pkg/ZipParserTest.java
index 9bc183b2c..f29d1dfb7 100644
--- a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pkg-module/src/test/java/org/apache/tika/parser/pkg/ZipParserTest.java
+++ b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pkg-module/src/test/java/org/apache/tika/parser/pkg/ZipParserTest.java
@@ -100,8 +100,7 @@ public class ZipParserTest extends AbstractPkgTest {
 
     @Test // TIKA-936
     public void testCustomEncoding() throws Exception {
-        ArchiveStreamFactory factory = new ArchiveStreamFactory();
-        factory.setEntryEncoding("SJIS");
+        ArchiveStreamFactory factory = new ArchiveStreamFactory("SJIS");
         trackingContext.set(ArchiveStreamFactory.class, factory);
 
         try (InputStream stream = TikaInputStream.get(Base64.decodeBase64(
diff --git a/tika-pipes/tika-emitters/tika-emitter-az-blob/src/main/java/org/apache/tika/pipes/emitter/azblob/AZBlobEmitter.java b/tika-pipes/tika-emitters/tika-emitter-az-blob/src/main/java/org/apache/tika/pipes/emitter/azblob/AZBlobEmitter.java
index 0deb0d42c..4d22ff83b 100644
--- a/tika-pipes/tika-emitters/tika-emitter-az-blob/src/main/java/org/apache/tika/pipes/emitter/azblob/AZBlobEmitter.java
+++ b/tika-pipes/tika-emitters/tika-emitter-az-blob/src/main/java/org/apache/tika/pipes/emitter/azblob/AZBlobEmitter.java
@@ -43,7 +43,6 @@ import org.apache.tika.config.Initializable;
 import org.apache.tika.config.InitializableProblemHandler;
 import org.apache.tika.config.Param;
 import org.apache.tika.exception.TikaConfigException;
-import org.apache.tika.exception.TikaException;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.metadata.Metadata;
 import org.apache.tika.metadata.TikaCoreProperties;
@@ -76,13 +75,15 @@ public class AZBlobEmitter extends AbstractEmitter implements Initializable, Str
     /**
      * Requires the src-bucket/path/to/my/file.txt in the {@link TikaCoreProperties#SOURCE_PATH}.
      *
+     * @param emitKey
      * @param metadataList
+     * @param parseContext
      * @throws IOException
-     * @throws TikaException
+     * @throws TikaEmitterException
      */
     @Override
     public void emit(String emitKey, List<Metadata> metadataList, ParseContext parseContext) throws IOException, TikaEmitterException {
-        if (metadataList == null || metadataList.size() == 0) {
+        if (metadataList == null || metadataList.isEmpty()) {
             throw new TikaEmitterException("metadata list must not be null or of size 0");
         }
         //TODO: estimate size of metadata list.  Above a certain size,
@@ -108,7 +109,9 @@ public class AZBlobEmitter extends AbstractEmitter implements Initializable, Str
      *                     otherwise, the client will copy the stream to a byte array and then
      *                     upload.
      * @param userMetadata this will be written to the az blob's properties.metadata
-     * @throws TikaEmitterException or IOexception if there is a Runtime client exception
+     * @param parseContext
+     * @throws IOException if there is a Runtime client exception
+     * @throws TikaEmitterException if there is a Runtime client exception
      */
     @Override
     public void emit(String path, InputStream is, Metadata userMetadata, ParseContext parseContext) throws IOException, TikaEmitterException {
@@ -155,12 +158,12 @@ public class AZBlobEmitter extends AbstractEmitter implements Initializable, Str
                 .toString(), overwriteExisting);
     }
 
-    private void write(String path, Metadata userMetadata, byte[] bytes) {
+    private void write(String path, Metadata userMetadata, byte[] bytes) throws IOException {
         String actualPath = getActualPath(path);
         LOGGER.debug("about to emit to target container: ({}) path:({})", container, actualPath);
         BlobClient blobClient = blobContainerClient.getBlobClient(actualPath);
         updateMetadata(blobClient, userMetadata);
-        blobClient.upload(new UnsynchronizedByteArrayInputStream(bytes), bytes.length, overwriteExisting);
+        blobClient.upload(UnsynchronizedByteArrayInputStream.builder().setByteArray(bytes).get(), bytes.length, overwriteExisting);
     }
 
     private void updateMetadata(BlobClient blobClient, Metadata userMetadata) {
@@ -181,7 +184,7 @@ public class AZBlobEmitter extends AbstractEmitter implements Initializable, Str
     }
 
     private String getActualPath(final String path) {
-        String ret = null;
+        String ret;
         if (!StringUtils.isBlank(prefix)) {
             ret = prefix + "/" + path;
         } else {
diff --git a/tika-pipes/tika-fetchers/tika-fetcher-az-blob/src/main/java/org/apache/tika/pipes/fetcher/azblob/AZBlobFetcher.java b/tika-pipes/tika-fetchers/tika-fetcher-az-blob/src/main/java/org/apache/tika/pipes/fetcher/azblob/AZBlobFetcher.java
index e38b71d9d..0dc05a2d5 100644
--- a/tika-pipes/tika-fetchers/tika-fetcher-az-blob/src/main/java/org/apache/tika/pipes/fetcher/azblob/AZBlobFetcher.java
+++ b/tika-pipes/tika-fetchers/tika-fetcher-az-blob/src/main/java/org/apache/tika/pipes/fetcher/azblob/AZBlobFetcher.java
@@ -20,8 +20,6 @@ import static org.apache.tika.config.TikaConfig.mustNotBeEmpty;
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.OutputStream;
-import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.Map;
 
@@ -105,9 +103,7 @@ public class AZBlobFetcher extends AbstractFetcher implements Initializable {
                 long start = System.currentTimeMillis();
                 TemporaryResources tmpResources = new TemporaryResources();
                 Path tmp = tmpResources.createTempFile();
-                try (OutputStream os = Files.newOutputStream(tmp)) {
-                    blobClient.download(os);
-                }
+                blobClient.downloadToFile(tmp.toRealPath().toString());
                 TikaInputStream tis = TikaInputStream.get(tmp, metadata, tmpResources);
                 long elapsed = System.currentTimeMillis() - start;
                 LOGGER.debug("took {} ms to copy to local tmp file", elapsed);
diff --git a/tika-server/tika-server-core/src/test/java/org/apache/tika/server/core/CXFTestBase.java b/tika-server/tika-server-core/src/test/java/org/apache/tika/server/core/CXFTestBase.java
index 808ebb7d2..944048d38 100644
--- a/tika-server/tika-server-core/src/test/java/org/apache/tika/server/core/CXFTestBase.java
+++ b/tika-server/tika-server-core/src/test/java/org/apache/tika/server/core/CXFTestBase.java
@@ -184,15 +184,16 @@ public abstract class CXFTestBase {
         Path tempFile = null;
         try {
             tempFile = writeTemporaryArchiveFile(inputStream, "zip");
-            ZipFile zip = new ZipFile(tempFile.toFile());
-            Enumeration<ZipArchiveEntry> entries = zip.getEntries();
-            while (entries.hasMoreElements()) {
-                ZipArchiveEntry entry = entries.nextElement();
-                ByteArrayOutputStream bos = new ByteArrayOutputStream();
-                IOUtils.copy(zip.getInputStream(entry), bos);
-                data.put(entry.getName(), DigestUtils.md5Hex(bos.toByteArray()));
+            try (ZipFile zip = ZipFile.builder().setPath(tempFile).get())
+            {
+                Enumeration<ZipArchiveEntry> entries = zip.getEntries();
+                while (entries.hasMoreElements()) {
+                    ZipArchiveEntry entry = entries.nextElement();
+                    ByteArrayOutputStream bos = new ByteArrayOutputStream();
+                    IOUtils.copy(zip.getInputStream(entry), bos);
+                    data.put(entry.getName(), DigestUtils.md5Hex(bos.toByteArray()));
+                }
             }
-            zip.close();
         } finally {
             if (tempFile != null) {
                 Files.delete(tempFile);
@@ -206,15 +207,16 @@ public abstract class CXFTestBase {
         Path tempFile = null;
         try {
             tempFile = writeTemporaryArchiveFile(inputStream, "zip");
-            ZipFile zip = new ZipFile(tempFile.toFile());
-            Enumeration<ZipArchiveEntry> entries = zip.getEntries();
-            while (entries.hasMoreElements()) {
-                ZipArchiveEntry entry = entries.nextElement();
-                ByteArrayOutputStream bos = new ByteArrayOutputStream();
-                IOUtils.copy(zip.getInputStream(entry), bos);
-                data.put(entry.getName(), bos.toByteArray());
+            try (ZipFile zip = ZipFile.builder().setPath(tempFile).get())
+            {
+                Enumeration<ZipArchiveEntry> entries = zip.getEntries();
+                while (entries.hasMoreElements()) {
+                    ZipArchiveEntry entry = entries.nextElement();
+                    ByteArrayOutputStream bos = new ByteArrayOutputStream();
+                    IOUtils.copy(zip.getInputStream(entry), bos);
+                    data.put(entry.getName(), bos.toByteArray());
+                }
             }
-            zip.close();
         } finally {
             if (tempFile != null) {
                 Files.delete(tempFile);
@@ -225,29 +227,32 @@ public abstract class CXFTestBase {
 
     protected String readArchiveText(InputStream inputStream) throws IOException {
         Path tempFile = writeTemporaryArchiveFile(inputStream, "zip");
-        ZipFile zip = new ZipFile(tempFile.toFile());
-        zip.getEntry(UnpackerResource.TEXT_FILENAME);
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        IOUtils.copy(zip.getInputStream(zip.getEntry(UnpackerResource.TEXT_FILENAME)), bos);
-
-        zip.close();
+        ByteArrayOutputStream bos;
+        try (ZipFile zip = ZipFile.builder().setPath(tempFile).get())
+        {
+            zip.getEntry(UnpackerResource.TEXT_FILENAME);
+            bos = new ByteArrayOutputStream();
+            IOUtils.copy(zip.getInputStream(zip.getEntry(UnpackerResource.TEXT_FILENAME)), bos);
+        }
         Files.delete(tempFile);
         return bos.toString(UTF_8.name());
     }
 
     protected String readArchiveMetadataAndText(InputStream inputStream) throws IOException {
         Path tempFile = writeTemporaryArchiveFile(inputStream, "zip");
-        ZipFile zip = new ZipFile(tempFile.toFile());
-        ByteArrayOutputStream bos = new ByteArrayOutputStream();
-        zip.getEntry(UnpackerResource.META_FILENAME);
-        IOUtils.copy(zip.getInputStream(zip.getEntry(UnpackerResource.META_FILENAME)), bos);
-        String metadata = new String(bos.toByteArray(), UTF_8);
-
-        bos = new ByteArrayOutputStream();
-        zip.getEntry(UnpackerResource.TEXT_FILENAME);
-        IOUtils.copy(zip.getInputStream(zip.getEntry(UnpackerResource.TEXT_FILENAME)), bos);
-        String txt = new String(bos.toByteArray(), UTF_8);
-        zip.close();
+        String metadata;
+        String txt;
+        try (ZipFile zip = ZipFile.builder().setPath(tempFile).get())
+        {
+            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+            zip.getEntry(UnpackerResource.META_FILENAME);
+            IOUtils.copy(zip.getInputStream(zip.getEntry(UnpackerResource.META_FILENAME)), bos);
+            metadata = new String(bos.toByteArray(), UTF_8);
+            bos = new ByteArrayOutputStream();
+            zip.getEntry(UnpackerResource.TEXT_FILENAME);
+            IOUtils.copy(zip.getInputStream(zip.getEntry(UnpackerResource.TEXT_FILENAME)), bos);
+            txt = new String(bos.toByteArray(), UTF_8);
+        }
         Files.delete(tempFile);
         return metadata + "\n\n" + txt;
     }