Author: centic
Date: Sat Feb 27 10:23:46 2016
New Revision: 1732619
URL: http://svn.apache.org/viewvc?rev=1732619&view=rev
Log:
Bug 57914: Provide a better error message for OOXML strict format which we do
not support yet.
Added:
poi/trunk/test-data/spreadsheet/57914.xlsx
Modified:
poi/trunk/src/integrationtest/org/apache/poi/TestAllFiles.java
poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/PackageRelationshipCollection.java
poi/trunk/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java
Modified: poi/trunk/src/integrationtest/org/apache/poi/TestAllFiles.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/integrationtest/org/apache/poi/TestAllFiles.java?rev=1732619&r1=1732618&r2=1732619&view=diff
==============================================================================
--- poi/trunk/src/integrationtest/org/apache/poi/TestAllFiles.java (original)
+++ poi/trunk/src/integrationtest/org/apache/poi/TestAllFiles.java Sat Feb 27
10:23:46 2016
@@ -254,6 +254,7 @@ public class TestAllFiles {
EXPECTED_FAILURES.add("spreadsheet/SampleSS.strict.xlsx");
EXPECTED_FAILURES.add("spreadsheet/SimpleStrict.xlsx");
EXPECTED_FAILURES.add("spreadsheet/sample.strict.xlsx");
+ EXPECTED_FAILURES.add("spreadsheet/57914.xlsx");
// non-TNEF files
EXPECTED_FAILURES.add("ddf/Container.dat");
Modified:
poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/PackageRelationshipCollection.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/PackageRelationshipCollection.java?rev=1732619&r1=1732618&r2=1732619&view=diff
==============================================================================
---
poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/PackageRelationshipCollection.java
(original)
+++
poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/PackageRelationshipCollection.java
Sat Feb 27 10:23:46 2016
@@ -273,13 +273,13 @@ public final class PackageRelationshipCo
if (index < 0 || index > relationshipsByID.values().size())
throw new IllegalArgumentException("index");
- PackageRelationship retRel = null;
int i = 0;
for (PackageRelationship rel : relationshipsByID.values()) {
if (index == i++)
return rel;
}
- return retRel;
+
+ return null;
}
/**
Modified:
poi/trunk/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java?rev=1732619&r1=1732618&r2=1732619&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java
(original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFReader.java
Sat Feb 27 10:23:46 2016
@@ -69,6 +69,18 @@ public class XSSFReader {
PackageRelationship coreDocRelationship =
this.pkg.getRelationshipsByType(
PackageRelationshipTypes.CORE_DOCUMENT).getRelationship(0);
+ // strict OOXML likely not fully supported, see #57699
+ // 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(
+
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!");
+ }
+
// Get the part that holds the workbook
workbookPart = this.pkg.getPart(coreDocRelationship);
}
Modified:
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java?rev=1732619&r1=1732618&r2=1732619&view=diff
==============================================================================
---
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java
(original)
+++
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/eventusermodel/TestXSSFReader.java
Sat Feb 27 10:23:46 2016
@@ -21,8 +21,8 @@ import java.io.InputStream;
import java.util.Iterator;
import java.util.List;
-import junit.framework.TestCase;
-
+import org.apache.poi.POIDataSamples;
+import org.apache.poi.POIXMLException;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xssf.XSSFTestDataSamples;
@@ -31,7 +31,8 @@ import org.apache.poi.xssf.model.StylesT
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
import org.apache.poi.xssf.usermodel.XSSFShape;
import org.apache.poi.xssf.usermodel.XSSFSimpleShape;
-import org.apache.poi.POIDataSamples;
+
+import junit.framework.TestCase;
/**
* Tests for {@link XSSFReader}
@@ -168,38 +169,64 @@ public final class TestXSSFReader extend
stream.close();
}
}
- /**
- * Test text extraction from text box using getShapes()
- * @throws Exception
- */
- public void testShapes() throws Exception{
- OPCPackage pkg =
XSSFTestDataSamples.openSamplePackage("WithTextBox.xlsx");
- XSSFReader r = new XSSFReader(pkg);
- XSSFReader.SheetIterator it =
(XSSFReader.SheetIterator)r.getSheetsData();
-
- StringBuilder sb = new StringBuilder();
- while(it.hasNext())
- {
- it.next();
- List<XSSFShape> shapes = it.getShapes();
- if (shapes != null){
- for (XSSFShape shape : shapes){
- if (shape instanceof XSSFSimpleShape){
- String t = ((XSSFSimpleShape)shape).getText();
- sb.append(t).append('\n');
- }
- }
- }
- }
- String text = sb.toString();
- assertTrue(text.indexOf("Line 1") > -1);
- assertTrue(text.indexOf("Line 2") > -1);
- assertTrue(text.indexOf("Line 3") > -1);
- }
-
+ /**
+ * Test text extraction from text box using getShapes()
+ *
+ * @throws Exception
+ */
+ public void testShapes() throws Exception {
+ OPCPackage pkg =
XSSFTestDataSamples.openSamplePackage("WithTextBox.xlsx");
+ XSSFReader r = new XSSFReader(pkg);
+ XSSFReader.SheetIterator it = (XSSFReader.SheetIterator)
r.getSheetsData();
+
+ String text = getShapesString(it);
+ assertTrue(text.contains("Line 1"));
+ assertTrue(text.contains("Line 2"));
+ assertTrue(text.contains("Line 3"));
+ }
+
+ private String getShapesString(XSSFReader.SheetIterator it) {
+ StringBuilder sb = new StringBuilder();
+ while (it.hasNext()) {
+ it.next();
+ List<XSSFShape> shapes = it.getShapes();
+ if (shapes != null) {
+ for (XSSFShape shape : shapes) {
+ if (shape instanceof XSSFSimpleShape) {
+ String t = ((XSSFSimpleShape) shape).getText();
+ sb.append(t).append('\n');
+ }
+ }
+ }
+ }
+ return sb.toString();
+ }
+
+ public void testBug57914() throws Exception {
+ OPCPackage pkg = XSSFTestDataSamples.openSamplePackage("57914.xlsx");
+ final XSSFReader r;
+
+ // for now expect this to fail, when we fix 57699, this one should
fail so we know we should adjust
+ // this test as well
+ try {
+ r = new XSSFReader(pkg);
+ fail("This will fail until bug 57699 is fixed");
+ } catch (POIXMLException e) {
+ assertTrue("Had " + e, e.getMessage().contains("57699"));
+ return;
+ }
+
+ XSSFReader.SheetIterator it = (XSSFReader.SheetIterator)
r.getSheetsData();
+
+ String text = getShapesString(it);
+ assertTrue(text.contains("Line 1"));
+ assertTrue(text.contains("Line 2"));
+ assertTrue(text.contains("Line 3"));
+ }
+
/**
- * NPE from XSSFReader$SheetIterator.<init> on XLSX files generated by
+ * NPE from XSSFReader$SheetIterator.<init> on XLSX files generated by
* the openpyxl library
*/
public void test58747() throws Exception {
@@ -209,11 +236,11 @@ public final class TestXSSFReader extend
XSSFReader reader = new XSSFReader(pkg);
StylesTable styles = reader.getStylesTable();
assertNotNull(styles);
-
+
XSSFReader.SheetIterator iter = (XSSFReader.SheetIterator)
reader.getSheetsData();
assertEquals(true, iter.hasNext());
iter.next();
-
+
assertEquals(false, iter.hasNext());
assertEquals("Orders", iter.getSheetName());
}
Added: poi/trunk/test-data/spreadsheet/57914.xlsx
URL:
http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/57914.xlsx?rev=1732619&view=auto
==============================================================================
Binary files poi/trunk/test-data/spreadsheet/57914.xlsx (added) and
poi/trunk/test-data/spreadsheet/57914.xlsx Sat Feb 27 10:23:46 2016 differ
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]