aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java31
-rw-r--r--src/ooxml/testcases/org/apache/poi/xssf/extractor/TestXSSFExportToXML.java47
-rw-r--r--test-data/spreadsheet/59026.xlsxbin0 -> 10400 bytes
3 files changed, 45 insertions, 33 deletions
diff --git a/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java b/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java
index 2277d600a7..7febd236b4 100644
--- a/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java
+++ b/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExportToXml.java
@@ -29,7 +29,6 @@ import java.util.Locale;
import java.util.Map;
import java.util.Vector;
-import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
@@ -98,12 +97,11 @@ public class XSSFExportToXml implements Comparator<String>{
* Exports the data in an XML stream
*
* @param os OutputStream in which will contain the output XML
- * @param validate if true, validates the XML againts the XML Schema
- * @throws SAXException
- * @throws TransformerException
- * @throws ParserConfigurationException
+ * @param validate if true, validates the XML against the XML Schema
+ * @throws SAXException If validating the document fails
+ * @throws TransformerException If transforming the document fails
*/
- public void exportToXML(OutputStream os, boolean validate) throws SAXException, ParserConfigurationException, TransformerException {
+ public void exportToXML(OutputStream os, boolean validate) throws SAXException, TransformerException {
exportToXML(os, "UTF-8", validate);
}
@@ -112,12 +110,11 @@ public class XSSFExportToXml implements Comparator<String>{
*
* @param os OutputStream in which will contain the output XML
* @param encoding the output charset encoding
- * @param validate if true, validates the XML againts the XML Schema
- * @throws SAXException
- * @throws ParserConfigurationException
- * @throws TransformerException
+ * @param validate if true, validates the XML against the XML Schema
+ * @throws SAXException If validating the document fails
+ * @throws TransformerException If transforming the document fails
*/
- public void exportToXML(OutputStream os, String encoding, boolean validate) throws SAXException, ParserConfigurationException, TransformerException{
+ public void exportToXML(OutputStream os, String encoding, boolean validate) throws SAXException, TransformerException{
List<XSSFSingleXmlCell> singleXMLCells = map.getRelatedSingleXMLCell();
List<XSSFTable> tables = map.getRelatedTables();
@@ -240,6 +237,7 @@ public class XSSFExportToXml implements Comparator<String>{
*
* @param xml the XML to validate
* @return true, if document is valid
+ * @throws SAXException If validating the document fails
*/
private boolean isValid(Document xml) throws SAXException{
try{
@@ -397,11 +395,11 @@ public class XSSFExportToXml implements Comparator<String>{
String[] leftTokens = leftXpath.split("/");
String[] rightTokens = rightXpath.split("/");
- int minLenght = leftTokens.length< rightTokens.length? leftTokens.length : rightTokens.length;
+ int minLength = leftTokens.length< rightTokens.length? leftTokens.length : rightTokens.length;
Node localComplexTypeRootNode = xmlSchema;
- for(int i =1;i <minLenght; i++) {
+ for(int i =1;i <minLength; i++) {
String leftElementName = leftTokens[i];
String rightElementName = rightTokens[i];
@@ -427,6 +425,9 @@ public class XSSFExportToXml implements Comparator<String>{
}
private int indexOfElementInComplexType(String elementName,Node complexType) {
+ if(complexType == null) {
+ return -1;
+ }
NodeList list = complexType.getChildNodes();
int indexOf = -1;
@@ -472,6 +473,10 @@ public class XSSFExportToXml implements Comparator<String>{
private String getComplexTypeNameFromChildren(Node localComplexTypeRootNode,
String elementNameWithoutNamespace) {
+ if(localComplexTypeRootNode == null) {
+ return "";
+ }
+
NodeList list = localComplexTypeRootNode.getChildNodes();
String complexTypeName = "";
diff --git a/src/ooxml/testcases/org/apache/poi/xssf/extractor/TestXSSFExportToXML.java b/src/ooxml/testcases/org/apache/poi/xssf/extractor/TestXSSFExportToXML.java
index 0415029004..783b7a0b26 100644
--- a/src/ooxml/testcases/org/apache/poi/xssf/extractor/TestXSSFExportToXML.java
+++ b/src/ooxml/testcases/org/apache/poi/xssf/extractor/TestXSSFExportToXML.java
@@ -17,17 +17,7 @@
package org.apache.poi.xssf.extractor;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.Date;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
+import junit.framework.TestCase;
import org.apache.poi.POIXMLDocumentPart;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
@@ -38,12 +28,20 @@ import org.apache.poi.xssf.XSSFTestDataSamples;
import org.apache.poi.xssf.model.MapInfo;
import org.apache.poi.xssf.usermodel.XSSFMap;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.junit.Test;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
-import junit.framework.TestCase;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Date;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
/**
* @author Roberto Manicardi
@@ -101,15 +99,13 @@ public final class TestXSSFExportToXML extends TestCase {
XSSFWorkbook wb = XSSFTestDataSamples
.openSampleWorkbook("CustomXmlMappings-inverse-order.xlsx");
- MapInfo mapInfo = null;
-
boolean found = false;
for (POIXMLDocumentPart p : wb.getRelations()) {
if (!(p instanceof MapInfo)) {
continue;
}
- mapInfo = (MapInfo) p;
+ MapInfo mapInfo = (MapInfo) p;
XSSFMap map = mapInfo.getXSSFMapById(1);
XSSFExportToXml exporter = new XSSFExportToXml(map);
@@ -150,13 +146,11 @@ public final class TestXSSFExportToXML extends TestCase {
XSSFWorkbook wb = XSSFTestDataSamples
.openSampleWorkbook("CustomXmlMappings-inverse-order.xlsx");
- MapInfo mapInfo = null;
-
boolean found = false;
for (POIXMLDocumentPart p : wb.getRelations()) {
if (p instanceof MapInfo) {
- mapInfo = (MapInfo) p;
+ MapInfo mapInfo = (MapInfo) p;
XSSFMap map = mapInfo.getXSSFMapById(1);
XSSFExportToXml exporter = new XSSFExportToXml(map);
@@ -340,7 +334,6 @@ public final class TestXSSFExportToXML extends TestCase {
assertTrue(found);
}
- @Test
public void testXmlExportIgnoresEmptyCells_Bugzilla_55924() throws Exception {
XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("55924.xlsx");
@@ -627,4 +620,18 @@ public final class TestXSSFExportToXML extends TestCase {
}
assertTrue(found);
}
+
+ public void testBug59026() throws Exception {
+ XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("59026.xlsx");
+
+ Collection<XSSFMap> mappings = wb.getCustomXMLMappings();
+ assertTrue(mappings.size() > 0);
+ for (XSSFMap map : mappings) {
+ XSSFExportToXml exporter = new XSSFExportToXml(map);
+
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+ exporter.exportToXML(os, false);
+ assertNotNull(os.toString("UTF-8"));
+ }
+ }
}
diff --git a/test-data/spreadsheet/59026.xlsx b/test-data/spreadsheet/59026.xlsx
new file mode 100644
index 0000000000..29c8c2dc6e
--- /dev/null
+++ b/test-data/spreadsheet/59026.xlsx
Binary files differ