From b3ac6e905ef22f9420481d191a4c684a064ca7a0 Mon Sep 17 00:00:00 2001 From: Andreas Beeker Date: Sun, 18 Nov 2018 22:09:44 +0000 Subject: [PATCH] #62921 - Provide OOXMLLite alternative for Java 12+ git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1846870 13f79535-47bb-0310-9956-ffa450edef68 --- build.xml | 7 ++-- .../org/apache/poi/TestAllFiles.java | 33 ++++++++++++------- .../poi/stress/AbstractFileHandler.java | 18 ++++++---- 3 files changed, 38 insertions(+), 20 deletions(-) diff --git a/build.xml b/build.xml index a49aa5311..f78ad14f4 100644 --- a/build.xml +++ b/build.xml @@ -335,8 +335,11 @@ under the License. - - + + + + + diff --git a/src/integrationtest/org/apache/poi/TestAllFiles.java b/src/integrationtest/org/apache/poi/TestAllFiles.java index 7d4495d87..61c47b9e8 100644 --- a/src/integrationtest/org/apache/poi/TestAllFiles.java +++ b/src/integrationtest/org/apache/poi/TestAllFiles.java @@ -90,6 +90,7 @@ import org.junit.runners.Parameterized.Parameters; @RunWith(Parameterized.class) public class TestAllFiles { private static final File ROOT_DIR = new File("test-data"); + private static final boolean IGNORE_SCRATCHPAD = Boolean.getBoolean("scratchpad.ignore"); public static final String[] SCAN_EXCLUDES = new String[] { "**/.svn/**", "lost+found", "**/.git/**" }; @@ -98,6 +99,7 @@ public class TestAllFiles { // map file extensions to the actual mappers public static final Map HANDLERS = new HashMap<>(); + static { // Excel HANDLERS.put(".xls", new HSSFFileHandler()); @@ -107,17 +109,17 @@ public class TestAllFiles { HANDLERS.put(".xlsb", new XSSFBFileHandler()); // Word - HANDLERS.put(".doc", new HWPFFileHandler()); + HANDLERS.put(".doc", IGNORE_SCRATCHPAD ? new HPSFFileHandler() : new HWPFFileHandler()); HANDLERS.put(".docx", new XWPFFileHandler()); HANDLERS.put(".dotx", new XWPFFileHandler()); HANDLERS.put(".docm", new XWPFFileHandler()); // OpenXML4J files - HANDLERS.put(".ooxml", new OPCFileHandler()); // OPCPackage - HANDLERS.put(".zip", new OPCFileHandler()); // OPCPackage + HANDLERS.put(".ooxml", new OPCFileHandler()); + HANDLERS.put(".zip", new OPCFileHandler()); // Powerpoint - HANDLERS.put(".ppt", new HSLFFileHandler()); + HANDLERS.put(".ppt", IGNORE_SCRATCHPAD ? new HPSFFileHandler() : new HSLFFileHandler()); HANDLERS.put(".pptx", new XSLFFileHandler()); HANDLERS.put(".pptm", new XSLFFileHandler()); HANDLERS.put(".ppsm", new XSLFFileHandler()); @@ -126,13 +128,13 @@ public class TestAllFiles { HANDLERS.put(".potx", new XSLFFileHandler()); // Outlook - HANDLERS.put(".msg", new HSMFFileHandler()); + HANDLERS.put(".msg", IGNORE_SCRATCHPAD ? new HPSFFileHandler() : new HSMFFileHandler()); // Publisher - HANDLERS.put(".pub", new HPBFFileHandler()); + HANDLERS.put(".pub", IGNORE_SCRATCHPAD ? new HPSFFileHandler() : new HPBFFileHandler()); // Visio - binary - HANDLERS.put(".vsd", new HDGFFileHandler()); + HANDLERS.put(".vsd", IGNORE_SCRATCHPAD ? new HPSFFileHandler() : new HDGFFileHandler()); // Visio - ooxml HANDLERS.put(".vsdm", new XDGFFileHandler()); @@ -153,7 +155,7 @@ public class TestAllFiles { HANDLERS.put(".adm", new HPSFFileHandler()); // Microsoft TNEF - HANDLERS.put(".dat", new HMEFFileHandler()); + HANDLERS.put(".dat", IGNORE_SCRATCHPAD ? new HPSFFileHandler() : new HMEFFileHandler()); // TODO: are these readable by some of the formats? HANDLERS.put(".wri", new NullFileHandler()); @@ -300,7 +302,7 @@ public class TestAllFiles { "spreadsheet/54764-2.xlsx", // see TestXSSFBugs.bug54764() "spreadsheet/54764.xlsx", // see TestXSSFBugs.bug54764() "poifs/unknown_properties.msg", // POIFS properties corrupted - "poifs/only-zero-byte-streams.ole2", // No actual contents + (IGNORE_SCRATCHPAD ? "" : "poifs/only-zero-byte-streams.ole2"), // No actual contents "spreadsheet/poc-xmlbomb.xlsx", // contains xml-entity-expansion "spreadsheet/poc-xmlbomb-empty.xlsx", // contains xml-entity-expansion "spreadsheet/poc-shared-strings.xlsx", // contains shared-string-entity-expansion @@ -438,8 +440,17 @@ public class TestAllFiles { } } - // let some file handlers do additional stuff - handler.handleAdditional(inputFile); + try { + // let some file handlers do additional stuff + handler.handleAdditional(inputFile); + } catch (AssumptionViolatedException e) { + // file handler ignored this file + } catch (Exception e) { + if(!EXPECTED_FAILURES.contains(file) && !AbstractFileHandler.EXPECTED_EXTRACTOR_FAILURES.contains(file)) { + System.out.println("Failed: " + file); + throw new Exception("While handling " + file, e); + } + } } public static String getExtension(String file) { diff --git a/src/integrationtest/org/apache/poi/stress/AbstractFileHandler.java b/src/integrationtest/org/apache/poi/stress/AbstractFileHandler.java index 480a7faf6..7f9c22ff4 100644 --- a/src/integrationtest/org/apache/poi/stress/AbstractFileHandler.java +++ b/src/integrationtest/org/apache/poi/stress/AbstractFileHandler.java @@ -79,26 +79,26 @@ public abstract class AbstractFileHandler implements FileHandler { long modified = file.lastModified(); POITextExtractor extractor = null; - try { + try { extractor = ExtractorFactory.createExtractor(file); assertNotNull("Should get a POITextExtractor but had none for file " + file, extractor); assertNotNull("Should get some text but had none for file " + file, extractor.getText()); - + // also try metadata @SuppressWarnings("resource") POITextExtractor metadataExtractor = extractor.getMetadataTextExtractor(); assertNotNull(metadataExtractor.getText()); - assertFalse("Expected Extraction to fail for file " + file + " and handler " + this + ", but did not fail!", + assertFalse("Expected Extraction to fail for file " + file + " and handler " + this + ", but did not fail!", EXPECTED_EXTRACTOR_FAILURES.contains(file.getParentFile().getName() + "/" + file.getName())); - + assertEquals("File should not be modified by extractor", length, file.length()); assertEquals("File should not be modified by extractor", modified, file.lastModified()); - + handleExtractingAsStream(file); - - if(extractor instanceof POIOLE2TextExtractor) { + + if (extractor instanceof POIOLE2TextExtractor) { try (HPSFPropertiesExtractor hpsfExtractor = new HPSFPropertiesExtractor((POIOLE2TextExtractor) extractor)) { assertNotNull(hpsfExtractor.getDocumentSummaryInformationText()); assertNotNull(hpsfExtractor.getSummaryInformationText()); @@ -115,6 +115,10 @@ public abstract class AbstractFileHandler implements FileHandler { String msg = "org.apache.poi.EncryptedDocumentException: Export Restrictions in place - please install JCE Unlimited Strength Jurisdiction Policy files"; assumeFalse(msg.equals(e.getMessage())); throw e; + } catch (IllegalStateException e) { + if (!e.getMessage().contains("POI Scratchpad jar missing") || !Boolean.getBoolean("scratchpad.ignore")) { + throw e; + } } finally { IOUtils.closeQuietly(extractor); }