This is an automated email from the ASF dual-hosted git repository.

tallison pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tika.git


The following commit(s) were added to refs/heads/main by this push:
     new 10d9254  TIKA-3164, revert back to poi 4.x in main
10d9254 is described below

commit 10d925439cd862f74679ec5fa9a9b5863f50ce2c
Author: tallison <[email protected]>
AuthorDate: Sat Dec 11 10:23:19 2021 -0500

    TIKA-3164, revert back to poi 4.x in main
---
 CHANGES.txt                                        |   4 -
 tika-bundles/tika-bundle-standard/pom.xml          |  42 +--
 tika-parent/pom.xml                                |   2 +-
 .../detect/microsoft/ooxml/OPCPackageDetector.java |   3 +-
 .../tika/parser/microsoft/OutlookExtractor.java    |   8 +-
 .../microsoft/ooxml/OOXMLExtractorFactory.java     |  25 +-
 .../parser/microsoft/ooxml/OPCPackageWrapper.java  |  39 --
 .../ooxml/SXSLFPowerPointExtractorDecorator.java   |   3 +-
 .../microsoft/ooxml/TikaXSSFSheetXMLHandler.java   | 411 ---------------------
 .../ooxml/XSLFPowerPointExtractorDecorator.java    |   6 +-
 .../ooxml/XSSFExcelExtractorDecorator.java         |   3 +-
 .../microsoft/ooxml/xps/XPSTextExtractor.java      |  23 +-
 .../xslf/XSLFEventBasedPowerPointExtractor.java    |  29 +-
 .../ooxml/xwpf/XWPFEventBasedWordExtractor.java    |  26 +-
 14 files changed, 34 insertions(+), 590 deletions(-)

diff --git a/CHANGES.txt b/CHANGES.txt
index a5d5b77..21f09c3 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,9 +1,5 @@
 Release 2.2.0 - ???
 
-   * Upgrade to Apache POI 5.1.0. NOTE: This results in an increase
-     of several orders of magnitude in logging. See https://s.apache.org/3gk46
-     for an example of how to turn off logging for POI. (TIKA-3164).
-
    * Fix logic bug in PipesServer that prevented concatenation of
      content from attachments (TIKA-3609).
 
diff --git a/tika-bundles/tika-bundle-standard/pom.xml 
b/tika-bundles/tika-bundle-standard/pom.xml
index 933fe65..2783d74 100644
--- a/tika-bundles/tika-bundle-standard/pom.xml
+++ b/tika-bundles/tika-bundle-standard/pom.xml
@@ -221,27 +221,21 @@
               !org.junit.*,
               !junit.*,
               org.apache.tika.fork,
-              org.apache.logging.log4j,
               android.util;resolution:=optional,
               com.apple.eawt;resolution:=optional,
               com.github.luben.zstd;resolution:=optional,
-              com.github.jaiimageio.*;resolution:=optional,
-              com.github.javaparser.*;resolution:=optional,
               com.google.common.util.concurrent.internal;resolution:=optional,
               com.google.errorprone.annotations;resolution:=optional,
               
com.google.errorprone.annotations.concurrent;resolution:=optional,
               com.google.protobuf;resolution:=optional,
               com.ibm.icu.text;resolution:=optional,
-              com.microsoft.schemas.*;resolution:=optional,
               com.sleepycat.je;resolution:=optional,
               com.sun.javadoc;resolution:=optional,
-              com.sun.org.apache.xml.internal.resolver.*;resolution:=optional,
               com.sun.xml.bind.marshaller;resolution:=optional,
               com.sun.xml.internal.bind.marshaller;resolution:=optional,
               com.sun.msv.datatype;resolution:=optional,
               com.sun.msv.datatype.xsd;resolution:=optional,
               com.sun.tools.javadoc;resolution:=optional,
-              de.rototor.pdfbox.graphics2d;resolution:=optional,
               javax.annotation;resolution:=optional,
               javax.mail;resolution:=optional,
               javax.mail.internet;resolution:=optional,
@@ -259,30 +253,17 @@
               javax.xml.bind.util;resolution:=optional,
               net.sf.saxon;resolution:=optional,
               net.sf.saxon.dom;resolution:=optional,
-              net.sf.saxon.lib;resolution:=optional,
-              net.sf.saxon.ma.map;resolution:=optional,
               net.sf.saxon.om;resolution:=optional,
               net.sf.saxon.query;resolution:=optional,
               net.sf.saxon.sxpath;resolution:=optional,
-              net.sf.saxon.tree.wrapper;resolution:=optional,
-              net.sf.saxon.trans;resolution:=optional,
-              net.sf.saxon.type;resolution:=optional,
               net.sf.saxon.value;resolution:=optional,
               org.apache.batik.anim.dom;resolution:=optional,
               org.apache.batik.bridge;resolution:=optional,
-              org.apache.batik.dom;resolution:=optional,
               org.apache.batik.ext.awt;resolution:=optional,
               org.apache.batik.ext.awt.image.renderable;resolution:=optional,
               org.apache.batik.gvt;resolution:=optional,
-              org.apache.batik.parser;resolution:=optional,
-              org.apache.batik.svggen;resolution:=optional,
               org.apache.batik.util;resolution:=optional,
               org.apache.jcp.xml.dsig.internal.dom;resolution:=optional,
-              org.apache.maven.model;resolution:=optional,
-              org.apache.maven.plugin;resolution:=optional,
-              org.apache.maven.plugin.logging;resolution:=optional,
-              org.apache.maven.project;resolution:=optional,
-              org.apache.poi.schemas.vmldrawing;resolution:=optional,
               org.apache.tools.ant;resolution:=optional,
               org.apache.tools.ant.taskdefs;resolution:=optional,
               org.apache.tools.ant.types;resolution:=optional,
@@ -292,9 +273,6 @@
               org.apache.xerces.xni.parser;resolution:=optional,
               org.apache.xml.resolver;resolution:=optional,
               org.apache.xml.resolver.readers;resolution:=optional,
-              org.w3c.dom.ranges;resolution:=optional,
-              org.w3c.dom.traversal;resolution:=optional,
-              sun.io;resolution:=optional,
               org.apache.xml.resolver.tools;resolution:=optional,
               org.apache.xml.security;resolution:=optional,
               org.apache.xml.security.c14n;resolution:=optional,
@@ -302,10 +280,12 @@
               org.apache.xml.security.utils;resolution:=optional,
               org.apache.xmlbeans.impl.xpath.saxon;resolution:=optional,
               org.apache.xmlbeans.impl.xquery.saxon;resolution:=optional,
+              org.w3c.dom.ranges;resolution:=optional,
+              org.w3c.dom.traversal;resolution:=optional,
+              sun.io;resolution:=optional,
               org.brotli.dec;resolution:=optional,
               org.cyberneko.html.xercesbridge;resolution:=optional,
               org.etsi.uri.x01903.v14;resolution:=optional,
-              org.etsi.uri.x01903.v13;resolution:=optional,
               org.jaxen;resolution:=optional,
               org.jaxen.dom4j;resolution:=optional,
               org.jaxen.pattern;resolution:=optional,
@@ -313,25 +293,9 @@
               org.jaxen.util;resolution:=optional,
               
org.openxmlformats.schemas.officeDocument.x2006.math;resolution:=optional,
               
org.openxmlformats.schemas.schemaLibrary.x2006.main;resolution:=optional,
-              
org.openxmlformats.schemas.drawingml.x2006.chart;resolution:=optional,
-              
org.openxmlformats.schemas.drawingml.x2006.main;resolution:=optional,
-              
org.openxmlformats.schemas.drawingml.x2006.picture;resolution:=optional,
-              
org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing;resolution:=optional,
-              
org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing;resolution:=optional,
-              
org.openxmlformats.schemas.officeDocument.x2006.customProperties;resolution:=optional,
-              
org.openxmlformats.schemas.officeDocument.x2006.extendedProperties;resolution:=optional,
-              
org.openxmlformats.schemas.officeDocument.x2006.relationships;resolution:=optional,
-              
org.openxmlformats.schemas.officeDocument.x2006.sharedTypes;resolution:=optional,
-              
org.openxmlformats.schemas.presentationml.x2006.main;resolution:=optional,
-              
org.openxmlformats.schemas.spreadsheetml.x2006.main;resolution:=optional,
-              
org.openxmlformats.schemas.wordprocessingml.x2006.main;resolution:=optional,
-              
org.openxmlformats.schemas.xpackage.x2006.digitalSignature;resolution:=optional,
-              org.osgi.framework;resolution:=optional,
               org.slf4j;resolution:=optional,
               org.slf4j.helpers;resolution:=optional,
               org.w3c.dom;resolution:=optional,
-              org.w3.x2000.x09.xmldsig;resolution:=optional,
-              org.w3c.dom.svg;resolution:=optional,
               org.xml.sax;resolution:=optional,
               org.xml.sax.ext;resolution:=optional,
               org.xml.sax.helpers;resolution:=optional,
diff --git a/tika-parent/pom.xml b/tika-parent/pom.xml
index 963e659..6f8e399 100644
--- a/tika-parent/pom.xml
+++ b/tika-parent/pom.xml
@@ -353,7 +353,7 @@
     <pax.exam.version>4.11.0</pax.exam.version>
     <pdfbox.version>2.0.24</pdfbox.version>
     <!-- NOTE: sync tukaani version with commons-compress in tika-parsers -->
-    <poi.version>5.1.0</poi.version>
+    <poi.version>4.1.2</poi.version>
     <quartz.version>2.3.2</quartz.version>
     <rome.version>1.16.0</rome.version>
     <scm.version>1.12.0</scm.version>
diff --git 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/detect/microsoft/ooxml/OPCPackageDetector.java
 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/detect/microsoft/ooxml/OPCPackageDetector.java
index 4e05078..dd58d10 100644
--- 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/detect/microsoft/ooxml/OPCPackageDetector.java
+++ 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/detect/microsoft/ooxml/OPCPackageDetector.java
@@ -51,7 +51,6 @@ import org.apache.tika.detect.zip.ZipContainerDetector;
 import org.apache.tika.io.TikaInputStream;
 import org.apache.tika.mime.MediaType;
 import org.apache.tika.parser.ParseContext;
-import org.apache.tika.parser.microsoft.ooxml.OPCPackageWrapper;
 import org.apache.tika.sax.OfflineContentHandler;
 import org.apache.tika.sax.StoppingEarlyException;
 import org.apache.tika.utils.XMLReaderUtils;
@@ -260,7 +259,7 @@ public class OPCPackageDetector implements 
ZipContainerDetector {
         }
         ((CloseShieldZipFileZipEntrySource)zipEntrySource).allowClose();
         //only set the open container if we made it here
-        stream.setOpenContainer(new OPCPackageWrapper(pkg));
+        stream.setOpenContainer(pkg);
         return type;
     }
 
diff --git 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/OutlookExtractor.java
 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/OutlookExtractor.java
index fd884de..a90f693 100644
--- 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/OutlookExtractor.java
+++ 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/OutlookExtractor.java
@@ -662,10 +662,10 @@ public class OutlookExtractor extends 
AbstractPOIFSExtractor {
 
         for (RecipientChunks chunks : recipientChunks) {
             Recipient r = new Recipient();
-            r.displayName = (chunks.getRecipientDisplayNameChunk() != null) ?
-                    chunks.getRecipientDisplayNameChunk().toString() : null;
-            r.name = (chunks.getRecipientNameChunk() != null) ?
-                    chunks.getRecipientNameChunk().toString() :
+            r.displayName = (chunks.recipientDisplayNameChunk != null) ?
+                    chunks.recipientDisplayNameChunk.toString() : null;
+            r.name = (chunks.recipientNameChunk != null) ?
+                    chunks.recipientNameChunk.toString() :
                     null;
             r.emailAddress = chunks.getRecipientEmailAddress();
             List<PropertyValue> vals = 
chunks.getProperties().get(MAPIProperty.RECIPIENT_TYPE);
diff --git 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/OOXMLExtractorFactory.java
 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/OOXMLExtractorFactory.java
index ec15fed..0340926 100644
--- 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/OOXMLExtractorFactory.java
+++ 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/OOXMLExtractorFactory.java
@@ -25,7 +25,7 @@ import java.util.Locale;
 import 
org.apache.commons.compress.archivers.zip.UnsupportedZipFeatureException;
 import org.apache.commons.io.input.CloseShieldInputStream;
 import org.apache.poi.ooxml.POIXMLDocument;
-import org.apache.poi.ooxml.extractor.POIXMLExtractorFactory;
+import org.apache.poi.ooxml.extractor.ExtractorFactory;
 import org.apache.poi.ooxml.extractor.POIXMLTextExtractor;
 import org.apache.poi.openxml4j.exceptions.InvalidOperationException;
 import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
@@ -34,9 +34,10 @@ import org.apache.poi.openxml4j.opc.PackageAccess;
 import org.apache.poi.openxml4j.opc.PackagePart;
 import org.apache.poi.openxml4j.opc.PackageRelationshipCollection;
 import org.apache.poi.util.LocaleUtil;
-import org.apache.poi.xslf.extractor.XSLFExtractor;
+import org.apache.poi.xslf.extractor.XSLFPowerPointExtractor;
 import org.apache.poi.xslf.usermodel.XMLSlideShow;
 import org.apache.poi.xslf.usermodel.XSLFRelation;
+import org.apache.poi.xslf.usermodel.XSLFSlideShow;
 import org.apache.poi.xssf.extractor.XSSFBEventBasedExcelExtractor;
 import org.apache.poi.xssf.extractor.XSSFEventBasedExcelExtractor;
 import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
@@ -73,7 +74,6 @@ public class OOXMLExtractorFactory {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(OOXMLExtractorFactory.class);
     private static final int MAX_BUFFER_LENGTH = 1000000;
-    private static POIXMLExtractorFactory EXTRACTOR_FACTORY = new 
POIXMLExtractorFactory();
 
     //TODO find what happened to SUPPORTED_TYPES
     private static XSLFRelation[] XSLF_RELATIONS = new XSLFRelation[] {
@@ -81,8 +81,9 @@ public class OOXMLExtractorFactory {
             XSLFRelation.PRESENTATIONML,
             XSLFRelation.PRESENTATIONML_TEMPLATE, 
XSLFRelation.PRESENTATION_MACRO
     };
+
     static {
-        POIXMLExtractorFactory.setAllThreadsPreferEventExtractors(true);
+        ExtractorFactory.setThreadPrefersEventExtractors(true);
     }
 
     public static void parse(InputStream stream, ContentHandler baseHandler, 
Metadata metadata,
@@ -99,8 +100,8 @@ public class OOXMLExtractorFactory {
 
             // Locate or Open the OPCPackage for the file
             TikaInputStream tis = TikaInputStream.cast(stream);
-            if (tis != null && tis.getOpenContainer() instanceof 
OPCPackageWrapper) {
-                pkg = ((OPCPackageWrapper) 
tis.getOpenContainer()).getOPCPackage();
+            if (tis != null && tis.getOpenContainer() instanceof OPCPackage) {
+                pkg = (OPCPackage) tis.getOpenContainer();
             } else if (tis != null && tis.hasFile()) {
                 try {
                     pkg = OPCPackage.open(tis.getFile().getPath(), 
PackageAccess.READ);
@@ -109,7 +110,7 @@ public class OOXMLExtractorFactory {
                     ZipSalvager.salvageCopy(tis.getFile(), tmpRepairedCopy);
                     pkg = OPCPackage.open(tmpRepairedCopy, PackageAccess.READ);
                 }
-                tis.setOpenContainer(new OPCPackageWrapper(pkg));
+                tis.setOpenContainer(pkg);
             } else {
                 //OPCPackage slurps rris into memory so we can close rris
                 //without apparent problems
@@ -195,7 +196,7 @@ public class OOXMLExtractorFactory {
             }
 
             if (poiExtractor == null) {
-                poiExtractor = EXTRACTOR_FACTORY.create(pkg);
+                poiExtractor = (POIXMLTextExtractor) 
ExtractorFactory.createExtractor(pkg);
             }
 
             POIXMLDocument document = poiExtractor.getDocument();
@@ -222,7 +223,7 @@ public class OOXMLExtractorFactory {
                                 "The extractor returned was a " + 
poiExtractor);
             } else if (document instanceof XMLSlideShow) {
                 extractor = new XSLFPowerPointExtractorDecorator(metadata, 
context,
-                        (org.apache.poi.xslf.extractor.XSLFExtractor) 
poiExtractor);
+                        
(org.apache.poi.xslf.extractor.XSLFPowerPointExtractor) poiExtractor);
             } else if (document instanceof XWPFDocument) {
                 extractor = new XWPFWordExtractorDecorator(metadata, context,
                         (XWPFWordExtractor) poiExtractor);
@@ -252,7 +253,7 @@ public class OOXMLExtractorFactory {
         } finally {
             if (tmpRepairedCopy != null) {
                 if (pkg != null) {
-                    pkg.revert();
+                    pkg.close();
                 }
                 boolean deleted = tmpRepairedCopy.delete();
                 if (!deleted) {
@@ -313,7 +314,7 @@ public class OOXMLExtractorFactory {
                 if (eventBased) {
                     return new XSLFEventBasedPowerPointExtractor(pkg);
                 } else {
-                    return new XSLFExtractor(new XMLSlideShow(pkg));
+                    return new XSLFPowerPointExtractor(new XSLFSlideShow(pkg));
                 }
             }
         }
@@ -322,7 +323,7 @@ public class OOXMLExtractorFactory {
             if (eventBased) {
                 return new XSLFEventBasedPowerPointExtractor(pkg);
             } else {
-                return new XSLFExtractor(new XMLSlideShow(pkg));
+                return new XSLFPowerPointExtractor(new XMLSlideShow(pkg));
             }
         }
         return null;
diff --git 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/OPCPackageWrapper.java
 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/OPCPackageWrapper.java
deleted file mode 100644
index e58afa2..0000000
--- 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/OPCPackageWrapper.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.tika.parser.microsoft.ooxml;
-
-import java.io.Closeable;
-import java.io.IOException;
-
-import org.apache.poi.openxml4j.opc.OPCPackage;
-
-public class OPCPackageWrapper implements Closeable {
-    private final OPCPackage opcPackage;
-
-    public OPCPackageWrapper(OPCPackage opcPackage) {
-        this.opcPackage = opcPackage;
-    }
-
-    @Override
-    public void close() throws IOException {
-        opcPackage.revert();
-    }
-
-    public OPCPackage getOPCPackage() {
-        return opcPackage;
-    }
-}
diff --git 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/SXSLFPowerPointExtractorDecorator.java
 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/SXSLFPowerPointExtractorDecorator.java
index b24284a..295138b 100644
--- 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/SXSLFPowerPointExtractorDecorator.java
+++ 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/SXSLFPowerPointExtractorDecorator.java
@@ -33,7 +33,6 @@ import org.apache.poi.openxml4j.opc.PackageRelationship;
 import org.apache.poi.openxml4j.opc.PackageRelationshipCollection;
 import org.apache.poi.openxml4j.opc.PackagingURIHelper;
 import org.apache.poi.openxml4j.opc.TargetMode;
-import org.apache.poi.xslf.extractor.XSLFExtractor;
 import org.apache.poi.xslf.usermodel.XSLFRelation;
 import org.xml.sax.Attributes;
 import org.xml.sax.ContentHandler;
@@ -96,7 +95,7 @@ public class SXSLFPowerPointExtractorDecorator extends 
AbstractOOXMLExtractor {
     }
 
     /**
-     * @see XSLFExtractor#getText()
+     * @see org.apache.poi.xslf.extractor.XSLFPowerPointExtractor#getText()
      */
     protected void buildXHTML(XHTMLContentHandler xhtml) throws SAXException, 
IOException {
 
diff --git 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/TikaXSSFSheetXMLHandler.java
 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/TikaXSSFSheetXMLHandler.java
deleted file mode 100644
index ad2ac8e..0000000
--- 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/TikaXSSFSheetXMLHandler.java
+++ /dev/null
@@ -1,411 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.tika.parser.microsoft.ooxml;
-
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.Queue;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.apache.poi.ss.usermodel.BuiltinFormats;
-import org.apache.poi.ss.usermodel.DataFormatter;
-import org.apache.poi.ss.usermodel.RichTextString;
-import org.apache.poi.ss.util.CellAddress;
-import org.apache.poi.xssf.eventusermodel.XSSFSheetXMLHandler;
-import org.apache.poi.xssf.model.Comments;
-import org.apache.poi.xssf.model.SharedStrings;
-import org.apache.poi.xssf.model.Styles;
-import org.apache.poi.xssf.usermodel.XSSFCellStyle;
-import org.apache.poi.xssf.usermodel.XSSFComment;
-import org.apache.poi.xssf.usermodel.XSSFRichTextString;
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.helpers.DefaultHandler;
-
-/**
- * This is a temporary work around for POI 5.1.0: 
https://bz.apache.org/bugzilla/show_bug.cgi?id=65676
- */
-public class TikaXSSFSheetXMLHandler extends DefaultHandler {
-    private static final Logger LOG = 
LogManager.getLogger(TikaXSSFSheetXMLHandler.class);
-    private Styles stylesTable;
-    private Comments comments;
-    private SharedStrings sharedStringsTable;
-    private final XSSFSheetXMLHandler.SheetContentsHandler 
sheetContentsHandler;
-    private boolean vIsOpen;
-    private boolean fIsOpen;
-    private boolean isIsOpen;
-    private boolean hfIsOpen;
-    private xssfDataType nextDataType;
-    private short formatIndex;
-    private String formatString;
-    private final DataFormatter formatter;
-    private int rowNum;
-    private int nextRowNum;
-    private String cellRef;
-    private boolean formulasNotResults;
-    private StringBuilder value;
-    private StringBuilder formula;
-    private StringBuilder headerFooter;
-    private Queue<CellAddress> commentCellRefs;
-
-    public TikaXSSFSheetXMLHandler(Styles styles, Comments comments, 
SharedStrings strings,
-                                   XSSFSheetXMLHandler.SheetContentsHandler 
sheetContentsHandler,
-                                   DataFormatter dataFormatter, boolean 
formulasNotResults) {
-        this.value = new StringBuilder(64);
-        this.formula = new StringBuilder(64);
-        this.headerFooter = new StringBuilder(64);
-        this.stylesTable = styles;
-        this.comments = comments;
-        this.sharedStringsTable = strings;
-        this.sheetContentsHandler = sheetContentsHandler;
-        this.formulasNotResults = formulasNotResults;
-        this.nextDataType = xssfDataType.NUMBER;
-        this.formatter = dataFormatter;
-        this.init(comments);
-    }
-
-    public TikaXSSFSheetXMLHandler(Styles styles, SharedStrings strings,
-                                   XSSFSheetXMLHandler.SheetContentsHandler 
sheetContentsHandler,
-                                   DataFormatter dataFormatter, boolean 
formulasNotResults) {
-        this(styles, (Comments) null, strings, sheetContentsHandler, 
dataFormatter,
-                formulasNotResults);
-    }
-
-    public TikaXSSFSheetXMLHandler(Styles styles, SharedStrings strings,
-                                   XSSFSheetXMLHandler.SheetContentsHandler 
sheetContentsHandler,
-                                   boolean formulasNotResults) {
-        this(styles, strings, sheetContentsHandler, new DataFormatter(), 
formulasNotResults);
-    }
-
-    private void init(Comments commentsTable) {
-        if (commentsTable != null) {
-            this.commentCellRefs = new LinkedList();
-            Iterator<CellAddress> iter = commentsTable.getCellAddresses();
-
-            while (iter.hasNext()) {
-                this.commentCellRefs.add(iter.next());
-            }
-        }
-    }
-
-    private boolean isTextTag(String name) {
-        if ("v".equals(name)) {
-            return true;
-        } else if ("inlineStr".equals(name)) {
-            return true;
-        } else {
-            return "t".equals(name) && this.isIsOpen;
-        }
-    }
-
-    public void startElement(String uri, String localName, String qName, 
Attributes attributes)
-            throws SAXException {
-        if (uri == null ||
-                
uri.equals("http://schemas.openxmlformats.org/spreadsheetml/2006/main";)) {
-            if (this.isTextTag(localName)) {
-                this.vIsOpen = true;
-                if (!this.isIsOpen) {
-                    this.value.setLength(0);
-                }
-            } else if ("is".equals(localName)) {
-                this.isIsOpen = true;
-            } else {
-                String cellType;
-                String cellStyleStr;
-                if ("f".equals(localName)) {
-                    this.formula.setLength(0);
-                    if (this.nextDataType == xssfDataType.NUMBER) {
-                        this.nextDataType = xssfDataType.FORMULA;
-                    }
-
-                    cellType = attributes.getValue("t");
-                    if (cellType != null && cellType.equals("shared")) {
-                        cellStyleStr = attributes.getValue("ref");
-                        String si = attributes.getValue("si");
-                        if (cellStyleStr != null) {
-                            this.fIsOpen = true;
-                        } else if (this.formulasNotResults) {
-                            LOG.atWarn().log("shared formulas not yet 
supported!");
-                        }
-                    } else {
-                        this.fIsOpen = true;
-                    }
-                } else if (!"oddHeader".equals(localName) && 
!"evenHeader".equals(localName) &&
-                        !"firstHeader".equals(localName) && 
!"firstFooter".equals(localName) &&
-                        !"oddFooter".equals(localName) && 
!"evenFooter".equals(localName)) {
-                    if ("row".equals(localName)) {
-                        cellType = attributes.getValue("r");
-                        if (cellType != null) {
-                            this.rowNum = Integer.parseInt(cellType) - 1;
-                        } else {
-                            this.rowNum = this.nextRowNum;
-                        }
-
-                        this.sheetContentsHandler.startRow(this.rowNum);
-                    } else if ("c".equals(localName)) {
-                        this.nextDataType = xssfDataType.NUMBER;
-                        this.formatIndex = -1;
-                        this.formatString = null;
-                        this.cellRef = attributes.getValue("r");
-                        cellType = attributes.getValue("t");
-                        cellStyleStr = attributes.getValue("s");
-                        if ("b".equals(cellType)) {
-                            this.nextDataType = xssfDataType.BOOLEAN;
-                        } else if ("e".equals(cellType)) {
-                            this.nextDataType = xssfDataType.ERROR;
-                        } else if ("inlineStr".equals(cellType)) {
-                            this.nextDataType = xssfDataType.INLINE_STRING;
-                        } else if ("s".equals(cellType)) {
-                            this.nextDataType = xssfDataType.SST_STRING;
-                        } else if ("str".equals(cellType)) {
-                            this.nextDataType = xssfDataType.FORMULA;
-                        } else {
-                            XSSFCellStyle style = null;
-                            if (this.stylesTable != null) {
-                                if (cellStyleStr != null) {
-                                    int styleIndex = 
Integer.parseInt(cellStyleStr);
-                                    style = 
this.stylesTable.getStyleAt(styleIndex);
-                                } else if (this.stylesTable.getNumCellStyles() 
> 0) {
-                                    style = this.stylesTable.getStyleAt(0);
-                                }
-                            }
-
-                            if (style != null) {
-                                this.formatIndex = style.getDataFormat();
-                                this.formatString = 
style.getDataFormatString();
-                                if (this.formatString == null) {
-                                    this.formatString =
-                                            
BuiltinFormats.getBuiltinFormat(this.formatIndex);
-                                }
-                            }
-                        }
-                    }
-                } else {
-                    this.hfIsOpen = true;
-                    this.headerFooter.setLength(0);
-                }
-            }
-
-        }
-    }
-
-    public void endElement(String uri, String localName, String qName) throws 
SAXException {
-        if (uri == null ||
-                
uri.equals("http://schemas.openxmlformats.org/spreadsheetml/2006/main";)) {
-            if (this.isTextTag(localName)) {
-                this.vIsOpen = false;
-                if (!this.isIsOpen) {
-                    this.outputCell();
-                }
-            } else if ("f".equals(localName)) {
-                this.fIsOpen = false;
-            } else if ("is".equals(localName)) {
-                this.isIsOpen = false;
-                this.outputCell();
-                this.value.setLength(0);
-            } else if ("row".equals(localName)) {
-                
this.checkForEmptyCellComments(EmptyCellCommentsCheckType.END_OF_ROW);
-                this.sheetContentsHandler.endRow(this.rowNum);
-                this.nextRowNum = this.rowNum + 1;
-            } else if ("sheetData".equals(localName)) {
-                
this.checkForEmptyCellComments(EmptyCellCommentsCheckType.END_OF_SHEET_DATA);
-                this.sheetContentsHandler.endSheet();
-            } else if (!"oddHeader".equals(localName) && 
!"evenHeader".equals(localName) &&
-                    !"firstHeader".equals(localName)) {
-                if ("oddFooter".equals(localName) || 
"evenFooter".equals(localName) ||
-                        "firstFooter".equals(localName)) {
-                    this.hfIsOpen = false;
-                    
this.sheetContentsHandler.headerFooter(this.headerFooter.toString(), false,
-                            localName);
-                }
-            } else {
-                this.hfIsOpen = false;
-                
this.sheetContentsHandler.headerFooter(this.headerFooter.toString(), true,
-                        localName);
-            }
-
-        }
-    }
-
-    public void characters(char[] ch, int start, int length) throws 
SAXException {
-        if (this.vIsOpen) {
-            this.value.append(ch, start, length);
-        }
-
-        if (this.fIsOpen) {
-            this.formula.append(ch, start, length);
-        }
-
-        if (this.hfIsOpen) {
-            this.headerFooter.append(ch, start, length);
-        }
-
-    }
-
-    private void outputCell() {
-        String thisStr = null;
-        switch (this.nextDataType) {
-            case BOOLEAN:
-                char first = this.value.charAt(0);
-                thisStr = first == '0' ? "FALSE" : "TRUE";
-                break;
-            case ERROR:
-                thisStr = "ERROR:" + this.value;
-                break;
-            case FORMULA:
-                if (this.formulasNotResults) {
-                    thisStr = this.formula.toString();
-                } else {
-                    String fv = this.value.toString();
-                    if (this.formatString != null) {
-                        try {
-                            double d = Double.parseDouble(fv);
-                            thisStr = this.formatter.formatRawCellContents(d, 
this.formatIndex,
-                                    this.formatString);
-                        } catch (NumberFormatException var8) {
-                            thisStr = fv;
-                        }
-                    } else {
-                        thisStr = fv;
-                    }
-                }
-                break;
-            case INLINE_STRING:
-                XSSFRichTextString rtsi = new 
XSSFRichTextString(this.value.toString());
-                thisStr = rtsi.toString();
-                break;
-            case SST_STRING:
-                String sstIndex = this.value.toString();
-
-                try {
-                    int idx = Integer.parseInt(sstIndex);
-                    RichTextString rtss = 
this.sharedStringsTable.getItemAt(idx);
-                    thisStr = rtss.toString();
-                } catch (NumberFormatException var7) {
-                    LOG.atError().withThrowable(var7)
-                            .log("Failed to parse SST index '{}'", sstIndex);
-                }
-                break;
-            case NUMBER:
-                String n = this.value.toString();
-                if (this.formatString != null && n.length() > 0) {
-                    thisStr = 
this.formatter.formatRawCellContents(Double.parseDouble(n),
-                            this.formatIndex, this.formatString);
-                } else {
-                    thisStr = n;
-                }
-                break;
-            default:
-                thisStr = "(TODO: Unexpected type: " + this.nextDataType + ")";
-        }
-
-        this.checkForEmptyCellComments(EmptyCellCommentsCheckType.CELL);
-        XSSFComment comment = this.comments != null ?
-                this.comments.findCellComment(new CellAddress(this.cellRef)) : 
null;
-        this.sheetContentsHandler.cell(this.cellRef, thisStr, comment);
-        this.value.setLength(0);
-    }
-
-    private void checkForEmptyCellComments(EmptyCellCommentsCheckType type) {
-        if (this.commentCellRefs != null && !this.commentCellRefs.isEmpty()) {
-            if (type == EmptyCellCommentsCheckType.END_OF_SHEET_DATA) {
-                while (!this.commentCellRefs.isEmpty()) {
-                    this.outputEmptyCellComment((CellAddress) 
this.commentCellRefs.remove());
-                }
-
-                return;
-            }
-
-            if (this.cellRef == null) {
-                if (type == EmptyCellCommentsCheckType.END_OF_ROW) {
-                    while (!this.commentCellRefs.isEmpty()) {
-                        if (((CellAddress) 
this.commentCellRefs.peek()).getRow() != this.rowNum) {
-                            return;
-                        }
-
-                        this.outputEmptyCellComment((CellAddress) 
this.commentCellRefs.remove());
-                    }
-
-                    return;
-                }
-
-                throw new IllegalStateException(
-                        "Cell ref should be null only if there are only empty 
cells in the row; rowNum: " +
-                                this.rowNum);
-            }
-
-            CellAddress nextCommentCellRef;
-            do {
-                CellAddress cellRef = new CellAddress(this.cellRef);
-                CellAddress peekCellRef = (CellAddress) 
this.commentCellRefs.peek();
-                if (type == EmptyCellCommentsCheckType.CELL && 
cellRef.equals(peekCellRef)) {
-                    this.commentCellRefs.remove();
-                    return;
-                }
-
-                int comparison = peekCellRef.compareTo(cellRef);
-                if (comparison > 0 && type == 
EmptyCellCommentsCheckType.END_OF_ROW &&
-                        peekCellRef.getRow() <= this.rowNum) {
-                    nextCommentCellRef = (CellAddress) 
this.commentCellRefs.remove();
-                    this.outputEmptyCellComment(nextCommentCellRef);
-                } else if (comparison < 0 && type == 
EmptyCellCommentsCheckType.CELL &&
-                        peekCellRef.getRow() <= this.rowNum) {
-                    nextCommentCellRef = (CellAddress) 
this.commentCellRefs.remove();
-                    this.outputEmptyCellComment(nextCommentCellRef);
-                } else {
-                    nextCommentCellRef = null;
-                }
-            } while (nextCommentCellRef != null && 
!this.commentCellRefs.isEmpty());
-        }
-
-    }
-
-    private void outputEmptyCellComment(CellAddress cellRef) {
-        XSSFComment comment = this.comments.findCellComment(cellRef);
-        this.sheetContentsHandler.cell(cellRef.formatAsString(), (String) 
null, comment);
-    }
-
-    public interface SheetContentsHandler {
-        void startRow(int var1);
-
-        void endRow(int var1);
-
-        void cell(String var1, String var2, XSSFComment var3);
-
-        default void headerFooter(String text, boolean isHeader, String 
tagName) {
-        }
-
-        default void endSheet() {
-        }
-    }
-
-    private static enum EmptyCellCommentsCheckType {
-        CELL, END_OF_ROW, END_OF_SHEET_DATA;
-
-        private EmptyCellCommentsCheckType() {
-        }
-    }
-
-    static enum xssfDataType {
-        BOOLEAN, ERROR, FORMULA, INLINE_STRING, SST_STRING, NUMBER;
-
-        private xssfDataType() {
-        }
-    }
-}
-
diff --git 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/XSLFPowerPointExtractorDecorator.java
 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/XSLFPowerPointExtractorDecorator.java
index 8501307..3fd96f7 100644
--- 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/XSLFPowerPointExtractorDecorator.java
+++ 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/XSLFPowerPointExtractorDecorator.java
@@ -31,7 +31,7 @@ import 
org.apache.poi.openxml4j.opc.PackageRelationshipCollection;
 import org.apache.poi.openxml4j.opc.PackagingURIHelper;
 import org.apache.poi.openxml4j.opc.TargetMode;
 import org.apache.poi.sl.usermodel.Placeholder;
-import org.apache.poi.xslf.extractor.XSLFExtractor;
+import org.apache.poi.xslf.extractor.XSLFPowerPointExtractor;
 import org.apache.poi.xslf.usermodel.XMLSlideShow;
 import org.apache.poi.xslf.usermodel.XSLFComment;
 import org.apache.poi.xslf.usermodel.XSLFCommentAuthors;
@@ -74,14 +74,14 @@ public class XSLFPowerPointExtractorDecorator extends 
AbstractOOXMLExtractor {
     private Metadata metadata;
 
     public XSLFPowerPointExtractorDecorator(Metadata metadata, ParseContext 
context,
-                                            XSLFExtractor extractor) {
+                                            XSLFPowerPointExtractor extractor) 
{
         super(context, extractor);
         this.metadata = metadata;
     }
 
 
     /**
-     * @see org.apache.poi.xslf.extractor.XSLFExtractor#getText()
+     * @see org.apache.poi.xslf.extractor.XSLFPowerPointExtractor#getText()
      */
     protected void buildXHTML(XHTMLContentHandler xhtml) throws SAXException, 
IOException {
         XMLSlideShow slideShow = (XMLSlideShow) extractor.getDocument();
diff --git 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/XSSFExcelExtractorDecorator.java
 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/XSSFExcelExtractorDecorator.java
index d06c6fe..c2fd0ab 100644
--- 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/XSSFExcelExtractorDecorator.java
+++ 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/XSSFExcelExtractorDecorator.java
@@ -43,6 +43,7 @@ import org.apache.poi.ss.usermodel.HeaderFooter;
 import org.apache.poi.ss.util.CellReference;
 import org.apache.poi.xssf.eventusermodel.ReadOnlySharedStringsTable;
 import org.apache.poi.xssf.eventusermodel.XSSFReader;
+import org.apache.poi.xssf.eventusermodel.XSSFSheetXMLHandler;
 import 
org.apache.poi.xssf.eventusermodel.XSSFSheetXMLHandler.SheetContentsHandler;
 import org.apache.poi.xssf.extractor.XSSFEventBasedExcelExtractor;
 import org.apache.poi.xssf.model.Comments;
@@ -349,7 +350,7 @@ public class XSSFExcelExtractorDecorator extends 
AbstractOOXMLExtractor {
         try {
 
             XSSFSheetInterestingPartsCapturer handler = new 
XSSFSheetInterestingPartsCapturer(
-                    new TikaXSSFSheetXMLHandler(styles, comments, strings, 
sheetContentsHandler,
+                    new XSSFSheetXMLHandler(styles, comments, strings, 
sheetContentsHandler,
                             formatter, false));
             XMLReaderUtils.parseSAX(sheetInputStream, handler, parseContext);
             sheetInputStream.close();
diff --git 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/xps/XPSTextExtractor.java
 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/xps/XPSTextExtractor.java
index 297290b..737f8fb 100644
--- 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/xps/XPSTextExtractor.java
+++ 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/xps/XPSTextExtractor.java
@@ -18,7 +18,6 @@
 package org.apache.tika.parser.microsoft.ooxml.xps;
 
 
-import java.io.Closeable;
 import java.io.IOException;
 
 import org.apache.poi.ooxml.POIXMLDocument;
@@ -33,15 +32,15 @@ import org.apache.xmlbeans.XmlException;
  * and keep the general framework similar to our other POI-integrated
  * extractors.
  */
-public class XPSTextExtractor implements POIXMLTextExtractor {
+public class XPSTextExtractor extends POIXMLTextExtractor {
 
     private final OPCPackage pkg;
     private final POIXMLProperties properties;
 
     public XPSTextExtractor(OPCPackage pkg) throws OpenXML4JException, 
XmlException, IOException {
+        super((POIXMLDocument)null);
         this.pkg = pkg;
         this.properties = new POIXMLProperties(pkg);
-
     }
 
     @Override
@@ -54,20 +53,6 @@ public class XPSTextExtractor implements POIXMLTextExtractor 
{
         return null;
     }
 
-    @Override
-    public void setCloseFilesystem(boolean b) {
-
-    }
-
-    @Override
-    public boolean isCloseFilesystem() {
-        return false;
-    }
-
-    @Override
-    public Closeable getFilesystem() {
-        return null;
-    }
 
     public POIXMLProperties.CoreProperties getCoreProperties() {
         return this.properties.getCoreProperties();
@@ -81,8 +66,4 @@ public class XPSTextExtractor implements POIXMLTextExtractor {
         return this.properties.getCustomProperties();
     }
 
-    @Override
-    public POIXMLDocument getDocument() {
-        return null;
-    }
 }
diff --git 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/xslf/XSLFEventBasedPowerPointExtractor.java
 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/xslf/XSLFEventBasedPowerPointExtractor.java
index 46ada51..ba413cc 100644
--- 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/xslf/XSLFEventBasedPowerPointExtractor.java
+++ 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/xslf/XSLFEventBasedPowerPointExtractor.java
@@ -17,7 +17,6 @@
 
 package org.apache.tika.parser.microsoft.ooxml.xslf;
 
-import java.io.Closeable;
 import java.io.IOException;
 import java.util.Date;
 
@@ -32,7 +31,7 @@ import 
org.apache.tika.parser.microsoft.ooxml.OOXMLWordAndPowerPointTextHandler;
 import org.apache.tika.parser.microsoft.ooxml.ParagraphProperties;
 import org.apache.tika.parser.microsoft.ooxml.RunProperties;
 
-public class XSLFEventBasedPowerPointExtractor implements POIXMLTextExtractor {
+public class XSLFEventBasedPowerPointExtractor extends POIXMLTextExtractor {
 
 
     private OPCPackage container;
@@ -40,6 +39,7 @@ public class XSLFEventBasedPowerPointExtractor implements 
POIXMLTextExtractor {
 
     public XSLFEventBasedPowerPointExtractor(OPCPackage container)
             throws XmlException, OpenXML4JException, IOException {
+        super((POIXMLDocument) null);
         this.container = container;
         this.properties = new POIXMLProperties(container);
     }
@@ -60,11 +60,6 @@ public class XSLFEventBasedPowerPointExtractor implements 
POIXMLTextExtractor {
         return this.properties.getCustomProperties();
     }
 
-    @Override
-    public POIXMLDocument getDocument() {
-        return null;
-    }
-
 
     @Override
     public String getText() {
@@ -72,26 +67,6 @@ public class XSLFEventBasedPowerPointExtractor implements 
POIXMLTextExtractor {
         return "";
     }
 
-    @Override
-    public void setCloseFilesystem(boolean b) {
-
-    }
-
-    @Override
-    public boolean isCloseFilesystem() {
-        return false;
-    }
-
-    @Override
-    public Closeable getFilesystem() {
-        return null;
-    }
-
-    @Override
-    public void close() throws IOException {
-        getPackage().revert();
-    }
-
     private static class XSLFToTextContentHandler
             implements 
OOXMLWordAndPowerPointTextHandler.XWPFBodyContentsHandler {
         private final StringBuilder buffer;
diff --git 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFEventBasedWordExtractor.java
 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFEventBasedWordExtractor.java
index ffc583c..74c94f5 100644
--- 
a/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFEventBasedWordExtractor.java
+++ 
b/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-microsoft-module/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFEventBasedWordExtractor.java
@@ -17,7 +17,6 @@
 
 package org.apache.tika.parser.microsoft.ooxml.xwpf;
 
-import java.io.Closeable;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Date;
@@ -58,7 +57,7 @@ import org.apache.tika.parser.microsoft.ooxml.XWPFListManager;
 /**
  * Experimental class that is based on POI's XSSFEventBasedExcelExtractor
  */
-public class XWPFEventBasedWordExtractor implements POIXMLTextExtractor {
+public class XWPFEventBasedWordExtractor extends POIXMLTextExtractor {
 
     private static final Logger LOG = 
LoggerFactory.getLogger(XWPFEventBasedWordExtractor.class);
 
@@ -67,6 +66,7 @@ public class XWPFEventBasedWordExtractor implements 
POIXMLTextExtractor {
 
     public XWPFEventBasedWordExtractor(OPCPackage container)
             throws XmlException, OpenXML4JException, IOException {
+        super((POIXMLDocument) null);
         this.container = container;
         this.properties = new POIXMLProperties(container);
     }
@@ -88,12 +88,6 @@ public class XWPFEventBasedWordExtractor implements 
POIXMLTextExtractor {
     }
 
     @Override
-    public POIXMLDocument getDocument() {
-        return null;
-    }
-
-
-    @Override
     public String getText() {
         StringBuilder sb = new StringBuilder();
         //handle main document
@@ -138,22 +132,6 @@ public class XWPFEventBasedWordExtractor implements 
POIXMLTextExtractor {
         return sb.toString();
     }
 
-    @Override
-    public void setCloseFilesystem(boolean b) {
-
-    }
-
-    @Override
-    public boolean isCloseFilesystem() {
-        return false;
-    }
-
-    @Override
-    public Closeable getFilesystem() {
-        return null;
-    }
-
-
     private void handleDocumentPart(PackagePart documentPart, StringBuilder sb)
             throws IOException, SAXException {
         //load the numbering/list manager and styles from the main document 
part

Reply via email to