From: Dominik Stadler Date: Tue, 17 May 2016 19:08:34 +0000 (+0000) Subject: Bug 59427: Add a check to better report cases when a document is already closed. X-Git-Tag: REL_3_15_BETA2~240 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=d595f90a18233e19b980a1868de3e01f2d8b9cbd;p=poi.git Bug 59427: Add a check to better report cases when a document is already closed. git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1744306 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/ooxml/java/org/apache/poi/POIXMLDocument.java b/src/ooxml/java/org/apache/poi/POIXMLDocument.java index 04d5c2d621..5d5ceafa36 100644 --- a/src/ooxml/java/org/apache/poi/POIXMLDocument.java +++ b/src/ooxml/java/org/apache/poi/POIXMLDocument.java @@ -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); } } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java index 8d3eb852c1..6e642ccca8 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java @@ -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); + } + } }