You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ce...@apache.org on 2015/10/26 08:54:07 UTC
svn commit: r1710521 - in /poi/trunk:
src/ooxml/java/org/apache/poi/openxml4j/opc/internal/marshallers/ZipPartMarshaller.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java
test-data/spreadsheet/56957.xlsx
Author: centic
Date: Mon Oct 26 07:54:06 2015
New Revision: 1710521
URL: http://svn.apache.org/viewvc?rev=1710521&view=rev
Log:
Bug 56957: Avoid error if Workbook with empty SharedStringTable is written
Added:
poi/trunk/test-data/spreadsheet/56957.xlsx
Modified:
poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/marshallers/ZipPartMarshaller.java
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java
Modified: poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/marshallers/ZipPartMarshaller.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/marshallers/ZipPartMarshaller.java?rev=1710521&r1=1710520&r2=1710521&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/marshallers/ZipPartMarshaller.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/marshallers/ZipPartMarshaller.java Mon Oct 26 07:54:06 2015
@@ -38,6 +38,7 @@ import org.apache.poi.openxml4j.opc.inte
import org.apache.poi.util.DocumentHelper;
import org.apache.poi.util.POILogFactory;
import org.apache.poi.util.POILogger;
+import org.apache.poi.xssf.usermodel.XSSFRelation;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -63,6 +64,12 @@ public final class ZipPartMarshaller imp
// Normally should happen only in developement phase, so just throw
// exception
}
+
+ // check if there is anything to save for some parts. We don't do this for all parts as some code
+ // might depend on empty parts being saved, e.g. some unit tests verify this currently.
+ if(part.getSize() == 0 && part.getPartName().getName().equals(XSSFRelation.SHARED_STRINGS.getDefaultFileName())) {
+ return true;
+ }
ZipOutputStream zos = (ZipOutputStream) os;
ZipEntry partEntry = new ZipEntry(ZipHelper
Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java?rev=1710521&r1=1710520&r2=1710521&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFWorkbook.java Mon Oct 26 07:54:06 2015
@@ -40,10 +40,12 @@ import org.apache.poi.POIXMLProperties;
import org.apache.poi.hssf.HSSFTestDataSamples;
import org.apache.poi.openxml4j.opc.ContentTypes;
import org.apache.poi.openxml4j.opc.OPCPackage;
+import org.apache.poi.openxml4j.opc.PackageAccess;
import org.apache.poi.openxml4j.opc.PackagePart;
import org.apache.poi.openxml4j.opc.PackagePartName;
import org.apache.poi.openxml4j.opc.PackageRelationshipCollection;
import org.apache.poi.openxml4j.opc.PackagingURIHelper;
+import org.apache.poi.openxml4j.opc.internal.FileHelper;
import org.apache.poi.openxml4j.opc.internal.MemoryPackagePart;
import org.apache.poi.openxml4j.opc.internal.PackagePropertiesPart;
import org.apache.poi.ss.SpreadsheetVersion;
@@ -1019,5 +1021,42 @@ public final class TestXSSFWorkbook exte
finally {
IOUtils.closeQuietly(wb);
}
+ }
+
+ @Test
+ public void testBug56957CloseWorkbook() throws Exception {
+ File file = TempFile.createTempFile("TestBug56957_", ".xlsx");
+
+ try {
+ // as the file is written to, we make a copy before actually working on it
+ FileHelper.copyFile(new File("test-data/spreadsheet/56957.xlsx"), file);
+
+ assertTrue(file.exists());
+
+ // read-only mode works!
+ Workbook workbook = WorkbookFactory.create(OPCPackage.open(file, PackageAccess.READ));
+ System.out.println(workbook.getSheetAt(0).getRow(0).getCell(0, Row.CREATE_NULL_AS_BLANK).getDateCellValue().toString());
+ workbook.close();
+ workbook = null;
+
+ workbook = WorkbookFactory.create(OPCPackage.open(file, PackageAccess.READ));
+ System.out.println(workbook.getSheetAt(0).getRow(0).getCell(0, Row.CREATE_NULL_AS_BLANK).getDateCellValue().toString());
+ workbook.close();
+ workbook = null;
+
+ // now check read/write mode
+ workbook = WorkbookFactory.create(OPCPackage.open(file, PackageAccess.READ_WRITE));
+ System.out.println(workbook.getSheetAt(0).getRow(0).getCell(0, Row.CREATE_NULL_AS_BLANK).getDateCellValue().toString());
+ workbook.close();
+ workbook = null;
+
+ workbook = WorkbookFactory.create(OPCPackage.open(file, PackageAccess.READ_WRITE));
+ System.out.println(workbook.getSheetAt(0).getRow(0).getCell(0, Row.CREATE_NULL_AS_BLANK).getDateCellValue().toString());
+ workbook.close();
+ workbook = null;
+ } finally {
+ assertTrue(file.exists());
+ assertTrue(file.delete());
+ }
}
}
Added: poi/trunk/test-data/spreadsheet/56957.xlsx
URL: http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/56957.xlsx?rev=1710521&view=auto
==============================================================================
Binary files poi/trunk/test-data/spreadsheet/56957.xlsx (added) and poi/trunk/test-data/spreadsheet/56957.xlsx Mon Oct 26 07:54:06 2015 differ
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org