Improve ReadOnlySharedStringsTable to cope gracefully with an empty SST part.
https://bz.apache.org/bugzilla/show_bug.cgi?id=58262 git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1696559 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
1e45197f59
commit
2af2fa28c2
@ -132,6 +132,7 @@ public class ReadOnlySharedStringsTable extends DefaultHandler {
|
|||||||
* @throws ParserConfigurationException
|
* @throws ParserConfigurationException
|
||||||
*/
|
*/
|
||||||
public void readFrom(InputStream is) throws IOException, SAXException {
|
public void readFrom(InputStream is) throws IOException, SAXException {
|
||||||
|
if (is.available() > 0) {
|
||||||
InputSource sheetSource = new InputSource(is);
|
InputSource sheetSource = new InputSource(is);
|
||||||
try {
|
try {
|
||||||
XMLReader sheetParser = SAXHelper.newXMLReader();
|
XMLReader sheetParser = SAXHelper.newXMLReader();
|
||||||
@ -141,6 +142,7 @@ public class ReadOnlySharedStringsTable extends DefaultHandler {
|
|||||||
throw new RuntimeException("SAX parser appears to be broken - " + e.getMessage());
|
throw new RuntimeException("SAX parser appears to be broken - " + e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return an integer representing the total count of strings in the workbook. This count does not
|
* Return an integer representing the total count of strings in the workbook. This count does not
|
||||||
|
@ -20,12 +20,16 @@
|
|||||||
package org.apache.poi.xssf.eventusermodel;
|
package org.apache.poi.xssf.eventusermodel;
|
||||||
|
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
import org.apache.poi.POIDataSamples;
|
import org.apache.poi.POIDataSamples;
|
||||||
import org.apache.poi.openxml4j.opc.OPCPackage;
|
import org.apache.poi.openxml4j.opc.OPCPackage;
|
||||||
import org.apache.poi.openxml4j.opc.PackagePart;
|
import org.apache.poi.openxml4j.opc.PackagePart;
|
||||||
import org.apache.poi.xssf.model.SharedStringsTable;
|
import org.apache.poi.xssf.model.SharedStringsTable;
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||||
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRst;
|
import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRst;
|
||||||
|
import org.xml.sax.SAXException;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
@ -55,4 +59,24 @@ public final class TestReadOnlySharedStringsTable extends TestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testEmptySSTOnPackageObtainedViaWorkbook() throws Exception {
|
||||||
|
XSSFWorkbook wb = new XSSFWorkbook(_ssTests.openResourceAsStream("noSharedStringTable.xlsx"));
|
||||||
|
OPCPackage pkg = wb.getPackage();
|
||||||
|
assertEmptySST(pkg);
|
||||||
|
wb.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void testEmptySSTOnPackageDirect() throws Exception {
|
||||||
|
OPCPackage pkg = OPCPackage.open(_ssTests.openResourceAsStream("noSharedStringTable.xlsx"));
|
||||||
|
assertEmptySST(pkg);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void assertEmptySST(OPCPackage pkg) throws IOException, SAXException {
|
||||||
|
ReadOnlySharedStringsTable sst = new ReadOnlySharedStringsTable(pkg);
|
||||||
|
assertEquals(0, sst.getCount());
|
||||||
|
assertEquals(0, sst.getUniqueCount());
|
||||||
|
assertNull(sst.getItems()); // same state it's left in if fed a package which has no SST part.
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
BIN
test-data/spreadsheet/noSharedStringTable.xlsx
Executable file
BIN
test-data/spreadsheet/noSharedStringTable.xlsx
Executable file
Binary file not shown.
Loading…
Reference in New Issue
Block a user