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
}
}