]> source.dussan.org Git - poi.git/commitdiff
add more xsbs to the ooxml-lite jar by recursing through XWPF and XSSF documents
authorAndreas Beeker <kiwiwings@apache.org>
Tue, 23 Mar 2021 23:58:47 +0000 (23:58 +0000)
committerAndreas Beeker <kiwiwings@apache.org>
Tue, 23 Mar 2021 23:58:47 +0000 (23:58 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1887978 13f79535-47bb-0310-9956-ffa450edef68

src/integrationtest/org/apache/poi/stress/POIXMLDocumentHandler.java
src/integrationtest/org/apache/poi/stress/XSSFFileHandler.java
src/integrationtest/org/apache/poi/stress/XWPFFileHandler.java
src/multimodule/ooxml-lite/java9/module-info.class
src/multimodule/ooxml-lite/java9/module-info.java

index a06b315d6e7e7b133d7f8b60f64aa88f9a67e832..930c904a77aa0724912f6f5832c231607ab011a6 100644 (file)
@@ -25,6 +25,8 @@ import org.apache.poi.ooxml.POIXMLDocument;
 import org.apache.poi.poifs.crypt.Decryptor;
 import org.apache.poi.poifs.filesystem.FileMagic;
 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+import org.apache.xmlbeans.XmlCursor;
+import org.apache.xmlbeans.XmlObject;
 
 public final class POIXMLDocumentHandler {
        protected void handlePOIXMLDocument(POIXMLDocument doc) throws Exception {
@@ -46,4 +48,25 @@ public final class POIXMLDocumentHandler {
         }
         return false;
     }
+
+    /**
+     * Recurse through the document and convert all elements so they are available in the ooxml-lite jar.
+     * This method only makes sense for hierarchical documents like .docx.
+     * If the document is split up in different parts like in .pptx, each part needs to be provided.
+     *
+     * @param base the entry point
+     */
+    protected static void cursorRecursive(XmlObject base) {
+        XmlCursor cur = base.newCursor();
+        try {
+            if (!cur.toFirstChild()) {
+                return;
+            }
+            do {
+                cursorRecursive(cur.getObject());
+            } while (cur.toNextSibling());
+        } finally {
+            cur.dispose();
+        }
+    }
 }
index 68f07b55be474783dff18e85e0b921f304912c3e..def8750c8428fca602dcfe46f10c90425b3601d5 100644 (file)
@@ -48,11 +48,13 @@ import org.apache.poi.openxml4j.opc.OPCPackage;
 import org.apache.poi.poifs.crypt.Decryptor;
 import org.apache.poi.poifs.crypt.EncryptionInfo;
 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.util.IOUtils;
 import org.apache.poi.util.NullPrintStream;
 import org.apache.poi.xssf.eventusermodel.XSSFReader;
 import org.apache.poi.xssf.extractor.XSSFExportToXml;
 import org.apache.poi.xssf.usermodel.XSSFMap;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.junit.jupiter.api.Test;
 import org.xml.sax.SAXException;
@@ -106,6 +108,11 @@ class XSSFFileHandler extends SpreadsheetHandler {
         // also verify general POIFS-stuff
         new POIXMLDocumentHandler().handlePOIXMLDocument(wb);
 
+        POIXMLDocumentHandler.cursorRecursive(wb.getCTWorkbook());
+        for (Sheet sh : wb) {
+            POIXMLDocumentHandler.cursorRecursive(((XSSFSheet)sh).getCTWorksheet());
+        }
+
         // and finally ensure that exporting to XML works
         exportToXML(wb);
 
index b5a497a3889453f11b937f4f6641741dc62cb695..0970d4fa1a60f4b772a6ddca5c16f3f586052094 100644 (file)
@@ -34,6 +34,7 @@ class XWPFFileHandler extends AbstractFileHandler {
         try (XWPFDocument doc = new XWPFDocument(stream)) {
 
             new POIXMLDocumentHandler().handlePOIXMLDocument(doc);
+            POIXMLDocumentHandler.cursorRecursive(doc.getDocument());
         } catch (POIXMLException e) {
             Exception cause = (Exception)e.getCause();
             throw cause == null ? e : cause;
index 2a720c718dbce28980eac8ad74ea97e6d1dfe7c0..6c12f9f9576359fc260dcd89b523fc02647a62a2 100644 (file)
Binary files a/src/multimodule/ooxml-lite/java9/module-info.class and b/src/multimodule/ooxml-lite/java9/module-info.class differ
index 2559d369d8c921663a34c6f46b1abb71e33fa166..f8e193e41eb3c31e7bfd1dfa2c32174435a6fe46 100644 (file)
@@ -29,6 +29,7 @@ open module org.apache.poi.ooxml.schemas {
     exports com.microsoft.schemas.office.excel;
     exports com.microsoft.schemas.office.office;
     exports com.microsoft.schemas.office.visio.x2012.main;
+    exports com.microsoft.schemas.office.word;
     exports com.microsoft.schemas.office.x2006.digsig;
     exports com.microsoft.schemas.vml;
     exports org.apache.poi.schemas.ooxml.system.ooxml;