]> source.dussan.org Git - poi.git/commitdiff
Bug 59427: Add a check to better report cases when a document is already closed.
authorDominik Stadler <centic@apache.org>
Tue, 17 May 2016 19:08:34 +0000 (19:08 +0000)
committerDominik Stadler <centic@apache.org>
Tue, 17 May 2016 19:08:34 +0000 (19:08 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1744306 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/POIXMLDocument.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java

index 04d5c2d621aff9ae542693928e39b4d8e874a7d4..5d5ceafa362f96d134c4c3bf3ed174165ba21a86 100644 (file)
@@ -196,6 +196,10 @@ public abstract class POIXMLDocument extends POIXMLDocumentPart implements Close
         //save extended and custom properties
         getProperties().commit();
 
-        getPackage().save(stream);
+        OPCPackage pkg = getPackage();
+        if(pkg == null) {
+            throw new IOException("Cannot write data, document seems to have been closed already");
+        }
+        pkg.save(stream);
     }
 }
index 8d3eb852c1264eaa17a40e8064014b3ce9e8152c..6e642ccca86efedc47d7ef6e5376fe3c78459fec 100644 (file)
@@ -1090,4 +1090,21 @@ public final class TestXSSFWorkbook extends BaseTestXWorkbook {
         //wb = new XSSFWorkbook(OPCPackage.open(file));
         //assertCloseDoesNotModifyFile(filename, wb);
     }
+
+       @Test
+       public void testCloseBeforeWrite() throws IOException {
+               Workbook wb = new XSSFWorkbook();
+               wb.createSheet("somesheet");
+
+               // test what happens if we close the Workbook before we write it out
+               wb.close();
+
+               try {
+                       XSSFTestDataSamples.writeOutAndReadBack(wb);
+                       fail("Expecting IOException here");
+               } catch (RuntimeException e) {
+                       // expected here
+                       assertTrue("Had: " + e.getCause(), e.getCause() instanceof IOException);
+               }
+       }
 }