mirror of https://github.com/apache/poi.git
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
This commit is contained in:
parent
79a9cf3692
commit
49fe3ba330
|
@ -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
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue