You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ta...@apache.org on 2017/01/26 14:38:04 UTC

tika git commit: TIKA-2251 -- make catch blocks as small as possible and improve "logging" with malformed files in new experimental SAX docx/pptx parsers.

Repository: tika
Updated Branches:
  refs/heads/master fe94908c0 -> 280ab87e8


TIKA-2251 --  make catch blocks as small as possible and improve "logging" with malformed files in new experimental SAX docx/pptx parsers.


Project: http://git-wip-us.apache.org/repos/asf/tika/repo
Commit: http://git-wip-us.apache.org/repos/asf/tika/commit/280ab87e
Tree: http://git-wip-us.apache.org/repos/asf/tika/tree/280ab87e
Diff: http://git-wip-us.apache.org/repos/asf/tika/diff/280ab87e

Branch: refs/heads/master
Commit: 280ab87e859ef3ca511994b9b7c2a21c8e0d7511
Parents: fe94908
Author: tballison <ta...@mitre.org>
Authored: Thu Jan 26 09:37:54 2017 -0500
Committer: tballison <ta...@mitre.org>
Committed: Thu Jan 26 09:37:54 2017 -0500

----------------------------------------------------------------------
 .../SXSLFPowerPointExtractorDecorator.java      | 112 ++++++++++++++-----
 .../ooxml/SXWPFWordExtractorDecorator.java      |  64 ++++++-----
 .../microsoft/ooxml/xwpf/XWPFStylesShim.java    |   5 +-
 3 files changed, 123 insertions(+), 58 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tika/blob/280ab87e/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/SXSLFPowerPointExtractorDecorator.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/SXSLFPowerPointExtractorDecorator.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/SXSLFPowerPointExtractorDecorator.java
index 188e410..76d7bf0 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/SXSLFPowerPointExtractorDecorator.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/SXSLFPowerPointExtractorDecorator.java
@@ -22,6 +22,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.zip.ZipException;
 
 import org.apache.commons.io.input.CloseShieldInputStream;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
@@ -36,11 +37,13 @@ import org.apache.poi.xslf.extractor.XSLFPowerPointExtractor;
 import org.apache.poi.xslf.usermodel.XSLFRelation;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
+import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.microsoft.ooxml.xslf.XSLFEventBasedPowerPointExtractor;
 import org.apache.tika.sax.EmbeddedContentHandler;
 import org.apache.tika.sax.OfflineContentHandler;
 import org.apache.tika.sax.XHTMLContentHandler;
+import org.apache.tika.utils.ExceptionUtils;
 import org.xml.sax.Attributes;
 import org.xml.sax.ContentHandler;
 import org.xml.sax.SAXException;
@@ -96,18 +99,27 @@ public class SXSLFPowerPointExtractorDecorator extends AbstractOOXMLExtractor {
 
         loadCommentAuthors();
 
-        //TODO: should check for custShowLst and order based on sldLst
-        try {
 
-            PackageRelationshipCollection prc = mainDocument.getRelationshipsByType(XSLFRelation.SLIDE.getRelation());
-            if (prc.size() == 0) {
+        PackageRelationshipCollection slidesPRC =
+                null;
+        try {
+            slidesPRC = mainDocument.getRelationshipsByType(XSLFRelation.SLIDE.getRelation());
+        } catch (InvalidFormatException e) {
+            metadata.add(TikaCoreProperties.TIKA_META_EXCEPTION_WARNING,
+                    ExceptionUtils.getStackTrace(e));
+        }
 
+        if (slidesPRC != null && slidesPRC.size() > 0) {
+            for (int i = 0; i < slidesPRC.size(); i++) {
+                try {
+                    handleSlidePart(mainDocument.getRelatedPart(slidesPRC.getRelationship(i)), xhtml);
+                } catch (InvalidFormatException|ZipException e) {
+                    metadata.add(TikaCoreProperties.TIKA_META_EXCEPTION_WARNING,
+                            ExceptionUtils.getStackTrace(e));
+                }
             }
-            for (int i = 0; i < prc.size(); i++) {
-                handleSlidePart(mainDocument.getRelatedPart(prc.getRelationship(i)), xhtml);
-            }
-        } catch (InvalidFormatException e) {
         }
+
         handleBasicRelatedParts(XSLFRelation.SLIDE_MASTER.getRelation(),
                 "slide-master",
                 mainDocument,
@@ -127,6 +139,8 @@ public class SXSLFPowerPointExtractorDecorator extends AbstractOOXMLExtractor {
         try {
             prc = mainDocument.getRelationshipsByType(XSLFRelation.COMMENT_AUTHORS.getRelation());
         } catch (InvalidFormatException e) {
+            metadata.add(TikaCoreProperties.TIKA_META_EXCEPTION_WARNING,
+                    ExceptionUtils.getStackTrace(e));
         }
         if (prc == null || prc.size() == 0) {
             return;
@@ -137,7 +151,8 @@ public class SXSLFPowerPointExtractorDecorator extends AbstractOOXMLExtractor {
             try {
                 commentAuthorsPart = commentAuthorsPart = mainDocument.getRelatedPart(prc.getRelationship(i));
             } catch (InvalidFormatException e) {
-
+                metadata.add(TikaCoreProperties.TIKA_META_EXCEPTION_WARNING,
+                        ExceptionUtils.getStackTrace(e));
             }
             if (commentAuthorsPart == null) {
                 continue;
@@ -148,7 +163,8 @@ public class SXSLFPowerPointExtractorDecorator extends AbstractOOXMLExtractor {
                         new OfflineContentHandler(new XSLFCommentAuthorHandler()));
 
             } catch (TikaException | SAXException | IOException e) {
-                //do something with this
+                metadata.add(TikaCoreProperties.TIKA_META_EXCEPTION_WARNING,
+                        ExceptionUtils.getStackTrace(e));
             }
         }
 
@@ -167,7 +183,8 @@ public class SXSLFPowerPointExtractorDecorator extends AbstractOOXMLExtractor {
                                     new OOXMLTikaBodyPartHandler(xhtml), linkedRelationships))));
 
         } catch (TikaException e) {
-            //do something with this
+            metadata.add(TikaCoreProperties.TIKA_META_EXCEPTION_WARNING,
+                    ExceptionUtils.getStackTrace(e));
         }
 
         xhtml.endElement("div");
@@ -193,7 +210,6 @@ public class SXSLFPowerPointExtractorDecorator extends AbstractOOXMLExtractor {
                 null, slidePart,
                 new XSLFCommentsHandler(xhtml));
 
-//        handleBasicRelatedParts("");
     }
 
     /**
@@ -212,7 +228,8 @@ public class SXSLFPowerPointExtractorDecorator extends AbstractOOXMLExtractor {
         try {
             relatedPartPRC = parentPart.getRelationshipsByType(contentType);
         } catch (InvalidFormatException e) {
-            //swallow
+            metadata.add(TikaCoreProperties.TIKA_META_EXCEPTION_WARNING,
+                    ExceptionUtils.getStackTrace(e));
         }
         if (relatedPartPRC != null && relatedPartPRC.size() > 0) {
             AttributesImpl attributes = new AttributesImpl();
@@ -228,10 +245,13 @@ public class SXSLFPowerPointExtractorDecorator extends AbstractOOXMLExtractor {
                                 new OfflineContentHandler(new EmbeddedContentHandler(contentHandler)));
 
                     } catch (IOException|TikaException e) {
-                        //do something with this
+                        metadata.add(TikaCoreProperties.TIKA_META_EXCEPTION_WARNING,
+                                ExceptionUtils.getStackTrace(e));
                     }
 
                 } catch (InvalidFormatException e) {
+                    metadata.add(TikaCoreProperties.TIKA_META_EXCEPTION_WARNING,
+                            ExceptionUtils.getStackTrace(e));
                 }
             }
             contentHandler.endElement("", "div", "div");
@@ -248,31 +268,52 @@ public class SXSLFPowerPointExtractorDecorator extends AbstractOOXMLExtractor {
         List<PackagePart> parts = new ArrayList<>();
         //TODO: consider: getPackage().getPartsByName(Pattern.compile("/ppt/embeddings/.*?
         //TODO: consider: getPackage().getPartsByName(Pattern.compile("/ppt/media/.*?
+        PackageRelationshipCollection slidePRC = null;
         try {
-            PackageRelationshipCollection prc = mainDocument.getRelationshipsByType(XSLFRelation.SLIDE.getRelation());
-            for (int i = 0; i < prc.size(); i++) {
-                PackagePart slidePart = mainDocument.getRelatedPart(prc.getRelationship(i));
+            slidePRC = mainDocument.getRelationshipsByType(XSLFRelation.SLIDE.getRelation());
+        } catch (InvalidFormatException e) {
+            metadata.add(TikaCoreProperties.TIKA_META_EXCEPTION_WARNING,
+                    ExceptionUtils.getStackTrace(e));
+
+        }
+        if (slidePRC != null) {
+            for (int i = 0; i < slidePRC.size(); i++) {
+                PackagePart slidePart = null;
+                try {
+                    slidePart = mainDocument.getRelatedPart(slidePRC.getRelationship(i));
+                } catch (InvalidFormatException e) {
+                    metadata.add(TikaCoreProperties.TIKA_META_EXCEPTION_WARNING,
+                            ExceptionUtils.getStackTrace(e));
+                }
                 addSlideParts(slidePart, parts);
             }
-        } catch (InvalidFormatException e) {
-            //log
         }
 
         parts.add(mainDocument);
         for (String rel : new String[]{
                 XSLFRelation.SLIDE_MASTER.getRelation(),
                 HANDOUT_MASTER}) {
+
+            PackageRelationshipCollection prc = null;
             try {
-                PackageRelationshipCollection prc = mainDocument.getRelationshipsByType(rel);
+                prc = mainDocument.getRelationshipsByType(rel);
+            } catch (InvalidFormatException e) {
+                metadata.add(TikaCoreProperties.TIKA_META_EXCEPTION_WARNING,
+                        ExceptionUtils.getStackTrace(e));
+            }
+            if (prc != null) {
                 for (int i = 0; i < prc.size(); i++) {
-                    PackagePart pp = mainDocument.getRelatedPart(prc.getRelationship(i));
+                    PackagePart pp = null;
+                    try {
+                        pp = mainDocument.getRelatedPart(prc.getRelationship(i));
+                    } catch (InvalidFormatException e) {
+                        metadata.add(TikaCoreProperties.TIKA_META_EXCEPTION_WARNING,
+                                ExceptionUtils.getStackTrace(e));
+                    }
                     if (pp != null) {
                         parts.add(pp);
                     }
                 }
-
-            } catch (InvalidFormatException e) {
-                //log
             }
         }
 
@@ -287,15 +328,28 @@ public class SXSLFPowerPointExtractorDecorator extends AbstractOOXMLExtractor {
                 XSLFRelation.NOTES_MASTER.getRelation(),
                 XSLFRelation.NOTES.getRelation()
         }) {
+            PackageRelationshipCollection prc = null;
             try {
-                for (PackageRelationship packageRelationship : slidePart.getRelationshipsByType(relation)) {
+                prc = slidePart.getRelationshipsByType(relation);
+            } catch (InvalidFormatException e) {
+                metadata.add(TikaCoreProperties.TIKA_META_EXCEPTION_WARNING,
+                        ExceptionUtils.getStackTrace(e));
+            }
+            if (prc != null) {
+                for (PackageRelationship packageRelationship : prc) {
                     if (packageRelationship.getTargetMode() == TargetMode.INTERNAL) {
-                        PackagePartName relName = PackagingURIHelper.createPartName(packageRelationship.getTargetURI());
-                        parts.add(packageRelationship.getPackage().getPart(relName));
+                        PackagePartName relName = null;
+                        try {
+                            relName = PackagingURIHelper.createPartName(packageRelationship.getTargetURI());
+                        } catch (InvalidFormatException e) {
+                            metadata.add(TikaCoreProperties.TIKA_META_EXCEPTION_WARNING,
+                                    ExceptionUtils.getStackTrace(e));
+                        }
+                        if (relName != null) {
+                            parts.add(packageRelationship.getPackage().getPart(relName));
+                        }
                     }
                 }
-            } catch (InvalidFormatException e) {
-
             }
         }
         //and slide of course

http://git-wip-us.apache.org/repos/asf/tika/blob/280ab87e/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/SXWPFWordExtractorDecorator.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/SXWPFWordExtractorDecorator.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/SXWPFWordExtractorDecorator.java
index bba83eb..89ad4e5 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/SXWPFWordExtractorDecorator.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/SXWPFWordExtractorDecorator.java
@@ -21,6 +21,7 @@ import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.zip.ZipException;
 
 import org.apache.commons.io.input.CloseShieldInputStream;
 import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
@@ -33,6 +34,7 @@ import org.apache.poi.xwpf.usermodel.XWPFNumbering;
 import org.apache.poi.xwpf.usermodel.XWPFRelation;
 import org.apache.tika.exception.TikaException;
 import org.apache.tika.metadata.Metadata;
+import org.apache.tika.metadata.TikaCoreProperties;
 import org.apache.tika.parser.ParseContext;
 import org.apache.tika.parser.microsoft.OfficeParserConfig;
 import org.apache.tika.parser.microsoft.ooxml.xwpf.XWPFEventBasedWordExtractor;
@@ -41,6 +43,7 @@ import org.apache.tika.parser.microsoft.ooxml.xwpf.XWPFStylesShim;
 import org.apache.tika.sax.EmbeddedContentHandler;
 import org.apache.tika.sax.OfflineContentHandler;
 import org.apache.tika.sax.XHTMLContentHandler;
+import org.apache.tika.utils.ExceptionUtils;
 import org.apache.xmlbeans.XmlException;
 import org.xml.sax.SAXException;
 
@@ -120,7 +123,13 @@ public class SXWPFWordExtractorDecorator extends AbstractOOXMLExtractor {
         //load the numbering/list manager and styles from the main document part
         XWPFNumbering numbering = loadNumbering(documentPart);
         XWPFListManager listManager = new XWPFListManager(numbering);
-        XWPFStylesShim styles = loadStyles(documentPart);
+        XWPFStylesShim styles = null;
+        try {
+            styles = loadStyles(documentPart);
+        } catch (Exception e) {
+            metadata.add(TikaCoreProperties.TIKA_META_EXCEPTION_WARNING,
+                    ExceptionUtils.getStackTrace(e));
+        }
 
         //headers
         try {
@@ -131,13 +140,18 @@ public class SXWPFWordExtractorDecorator extends AbstractOOXMLExtractor {
                     handlePart(header, styles, listManager, xhtml);
                 }
             }
-        } catch (InvalidFormatException e) {
-            //swallow
+        } catch (InvalidFormatException|ZipException e) {
+            metadata.add(TikaCoreProperties.TIKA_META_EXCEPTION_WARNING,
+                    ExceptionUtils.getStackTrace(e));
         }
 
         //main document
-        handlePart(documentPart, styles, listManager, xhtml);
-
+        try {
+            handlePart(documentPart, styles, listManager, xhtml);
+        } catch (ZipException e) {
+            metadata.add(TikaCoreProperties.TIKA_META_EXCEPTION_WARNING,
+                    ExceptionUtils.getStackTrace(e));
+        }
         //for now, just dump other components at end
         for (XWPFRelation rel : new XWPFRelation[]{
                 XWPFRelation.FOOTNOTE,
@@ -153,8 +167,9 @@ public class SXWPFWordExtractorDecorator extends AbstractOOXMLExtractor {
                         handlePart(packagePart, styles, listManager, xhtml);
                     }
                 }
-            } catch (InvalidFormatException e) {
-                //swallow
+            } catch (InvalidFormatException|ZipException e) {
+                metadata.add(TikaCoreProperties.TIKA_META_EXCEPTION_WARNING,
+                        ExceptionUtils.getStackTrace(e));
             }
         }
     }
@@ -171,31 +186,28 @@ public class SXWPFWordExtractorDecorator extends AbstractOOXMLExtractor {
                                     new OOXMLTikaBodyPartHandler(xhtml, styles, listManager,
                                             context.get(OfficeParserConfig.class)), linkedRelationships))));
         } catch (TikaException e) {
-            //swallow
+            metadata.add(TikaCoreProperties.TIKA_META_EXCEPTION_WARNING,
+                    ExceptionUtils.getStackTrace(e));
+
         }
 
     }
 
 
-
-    private XWPFStylesShim loadStyles(PackagePart packagePart) {
-        try {
-            PackageRelationshipCollection stylesParts =
-                    packagePart.getRelationshipsByType(XWPFRelation.STYLES.getRelation());
-            if (stylesParts.size() > 0) {
-                PackageRelationship stylesRelationShip = stylesParts.getRelationship(0);
-                if (stylesRelationShip == null) {
-                    return null;
-                }
-                PackagePart stylesPart = packagePart.getRelatedPart(stylesRelationShip);
-                if (stylesPart == null) {
-                    return null;
-                }
-
-                return new XWPFStylesShim(stylesPart, context);
+    private XWPFStylesShim loadStyles(PackagePart packagePart) throws InvalidFormatException, TikaException, IOException, SAXException {
+        PackageRelationshipCollection stylesParts =
+                packagePart.getRelationshipsByType(XWPFRelation.STYLES.getRelation());
+        if (stylesParts.size() > 0) {
+            PackageRelationship stylesRelationShip = stylesParts.getRelationship(0);
+            if (stylesRelationShip == null) {
+                return null;
             }
-        } catch (OpenXML4JException e) {
-            //swallow
+            PackagePart stylesPart = packagePart.getRelatedPart(stylesRelationShip);
+            if (stylesPart == null) {
+                return null;
+            }
+
+            return new XWPFStylesShim(stylesPart, context);
         }
         return null;
 

http://git-wip-us.apache.org/repos/asf/tika/blob/280ab87e/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFStylesShim.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFStylesShim.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFStylesShim.java
index 395602e..0883747 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFStylesShim.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/xwpf/XWPFStylesShim.java
@@ -50,11 +50,10 @@ public class XWPFStylesShim {
 
     }
 
-    public XWPFStylesShim(PackagePart part, ParseContext parseContext) {
+    public XWPFStylesShim(PackagePart part, ParseContext parseContext) throws IOException, TikaException, SAXException {
+
         try (InputStream is = part.getInputStream()) {
             onDocumentLoad(parseContext, is);
-        } catch (IOException|TikaException|SAXException e) {
-            //swallow
         }
     }