aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPJ Fanning <fanningpj@apache.org>2021-02-13 19:43:07 +0000
committerPJ Fanning <fanningpj@apache.org>2021-02-13 19:43:07 +0000
commit49fe3ba330a62259f6eadc398ae31265c474d1ef (patch)
treec4ea8a06c5eb3a5d5b64a6b2ef3976c64f234dae /src
parent79a9cf36926d3c6f634768fc0fb0895ebe8c87b0 (diff)
downloadpoi-49fe3ba330a62259f6eadc398ae31265c474d1ef.tar.gz
poi-49fe3ba330a62259f6eadc398ae31265c474d1ef.zip
allo XSSFReader to be sublclassed with implementation that allows OOXMl Strict files
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1886493 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src')
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java20
-rw-r--r--src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java22
2 files changed, 39 insertions, 3 deletions
diff --git a/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java b/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java
index 31e20e58a7..3a13bfb07e 100644
--- a/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java
+++ b/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java
@@ -82,6 +82,16 @@ public class XSSFReader {
* Creates a new XSSFReader, for the given package
*/
public XSSFReader(OPCPackage pkg) throws IOException, OpenXML4JException {
+ this(pkg, false);
+ }
+
+ /**
+ * Creates a new XSSFReader, for the given package
+ *
+ * @param pkg an <code>OPCPackage</code> representing a spreasheet file
+ * @param allowStrictOoxmlFiles whether to try to handle Strict OOXML format files
+ */
+ public XSSFReader(OPCPackage pkg, boolean allowStrictOoxmlFiles) throws IOException, OpenXML4JException {
this.pkg = pkg;
PackageRelationship coreDocRelationship = this.pkg.getRelationshipsByType(
@@ -91,19 +101,23 @@ public class XSSFReader {
// this code is similar to POIXMLDocumentPart.getPartFromOPCPackage(), but I could not combine it
// easily due to different return values
if (coreDocRelationship == null) {
- if (this.pkg.getRelationshipsByType(
+ if (allowStrictOoxmlFiles) {
+ coreDocRelationship = this.pkg.getRelationshipsByType(
+ PackageRelationshipTypes.STRICT_CORE_DOCUMENT).getRelationship(0);
+ } else if (this.pkg.getRelationshipsByType(
PackageRelationshipTypes.STRICT_CORE_DOCUMENT).getRelationship(0) != null) {
throw new POIXMLException("Strict OOXML isn't currently supported, please see bug #57699");
}
- throw new POIXMLException("OOXML file structure broken/invalid - no core document found!");
+ if (coreDocRelationship == null) {
+ throw new POIXMLException("OOXML file structure broken/invalid - no core document found!");
+ }
}
// Get the part that holds the workbook
workbookPart = this.pkg.getPart(coreDocRelationship);
}
-
/**
* Opens up the Shared Strings Table, parses it, and
* returns a handy object for working with
diff --git a/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java b/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java
index 70c78b3184..697af659c7 100644
--- a/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java
+++ b/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java
@@ -334,6 +334,28 @@ public final class TestXSSFReader {
}
}
+ @Test
+ void testStrictOoxmlNotAllowed() throws Exception {
+ assertThrows(POIXMLException.class, () -> {
+ try (OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("sample.strict.xlsx"))) {
+ XSSFReader reader = new XSSFReader(pkg);
+ }
+ });
+ assertThrows(POIXMLException.class, () -> {
+ try (OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("sample.strict.xlsx"))) {
+ XSSFReader reader = new XSSFReader(pkg, false);
+ }
+ });
+ }
+
+ @Test
+ void testStrictOoxmlAllowed() throws Exception {
+ try (OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("sample.strict.xlsx"))) {
+ XSSFReader reader = new XSSFReader(pkg, true);
+ assertNotNull(reader.pkg);
+ }
+ }
+
private static String hash(XSSFReader reader) throws IOException {
Iterable<InputStream> iter = () -> {
try {