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]

Reply via email to