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 2016/04/18 17:06:14 UTC
tika git commit: clean up to "Add DOM and Stax parsers to ParseContext
Repository: tika
Updated Branches:
refs/heads/master 3d491317c -> 172c58443
clean up to "Add DOM and Stax parsers to ParseContext
Project: http://git-wip-us.apache.org/repos/asf/tika/repo
Commit: http://git-wip-us.apache.org/repos/asf/tika/commit/172c5844
Tree: http://git-wip-us.apache.org/repos/asf/tika/tree/172c5844
Diff: http://git-wip-us.apache.org/repos/asf/tika/diff/172c5844
Branch: refs/heads/master
Commit: 172c58443550d256a94994aba24c6600a2397256
Parents: 3d49131
Author: tballison <ta...@mitre.org>
Authored: Mon Apr 18 11:05:34 2016 -0400
Committer: tballison <ta...@mitre.org>
Committed: Mon Apr 18 11:05:34 2016 -0400
----------------------------------------------------------------------
.../batch/builders/BatchProcessBuilder.java | 15 ++++----
.../builders/CommandLineParserBuilder.java | 16 ++++-----
.../java/org/apache/tika/config/TikaConfig.java | 14 +++-----
.../tika/config/TikaConfigSerializer.java | 4 +--
.../org/apache/tika/mime/MimeTypesReader.java | 20 ++++++-----
.../org/apache/tika/parser/ParseContext.java | 30 +++++++++-------
.../external/ExternalParsersConfigReader.java | 11 ++----
.../org/apache/tika/parser/mock/MockParser.java | 12 +++----
.../tika/parser/epub/EpubContentParser.java | 33 ++++-------------
.../ooxml/XSSFExcelExtractorDecorator.java | 11 +++---
.../parser/odf/OpenDocumentContentParser.java | 37 +++++---------------
.../org/apache/tika/parser/pdf/PDFParser.java | 2 +-
12 files changed, 75 insertions(+), 130 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tika/blob/172c5844/tika-batch/src/main/java/org/apache/tika/batch/builders/BatchProcessBuilder.java
----------------------------------------------------------------------
diff --git a/tika-batch/src/main/java/org/apache/tika/batch/builders/BatchProcessBuilder.java b/tika-batch/src/main/java/org/apache/tika/batch/builders/BatchProcessBuilder.java
index 83afa78..df5e4bf 100644
--- a/tika-batch/src/main/java/org/apache/tika/batch/builders/BatchProcessBuilder.java
+++ b/tika-batch/src/main/java/org/apache/tika/batch/builders/BatchProcessBuilder.java
@@ -18,8 +18,6 @@ package org.apache.tika.batch.builders;
*/
import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collections;
@@ -33,6 +31,9 @@ import org.apache.tika.batch.FileResource;
import org.apache.tika.batch.FileResourceCrawler;
import org.apache.tika.batch.Interrupter;
import org.apache.tika.batch.StatusReporter;
+import org.apache.tika.exception.TikaException;
+import org.apache.tika.io.IOExceptionWithCause;
+import org.apache.tika.parser.ParseContext;
import org.apache.tika.util.ClassLoaderUtil;
import org.apache.tika.util.XMLDOMUtil;
import org.w3c.dom.Document;
@@ -65,15 +66,11 @@ public class BatchProcessBuilder {
*/
public BatchProcess build(InputStream is, Map<String,String> runtimeAttributes) throws IOException {
Document doc = null;
- DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
- DocumentBuilder docBuilder = null;
try {
- docBuilder = fact.newDocumentBuilder();
+ DocumentBuilder docBuilder = new ParseContext().getDocumentBuilder();
doc = docBuilder.parse(is);
- } catch (ParserConfigurationException e) {
- throw new IOException(e);
- } catch (SAXException e) {
- throw new IOException(e);
+ } catch (TikaException|SAXException e) {
+ throw new IOExceptionWithCause(e);
}
Node docElement = doc.getDocumentElement();
return build(docElement, runtimeAttributes);
http://git-wip-us.apache.org/repos/asf/tika/blob/172c5844/tika-batch/src/main/java/org/apache/tika/batch/builders/CommandLineParserBuilder.java
----------------------------------------------------------------------
diff --git a/tika-batch/src/main/java/org/apache/tika/batch/builders/CommandLineParserBuilder.java b/tika-batch/src/main/java/org/apache/tika/batch/builders/CommandLineParserBuilder.java
index 9a32f12..66b55bf 100644
--- a/tika-batch/src/main/java/org/apache/tika/batch/builders/CommandLineParserBuilder.java
+++ b/tika-batch/src/main/java/org/apache/tika/batch/builders/CommandLineParserBuilder.java
@@ -18,14 +18,15 @@ package org.apache.tika.batch.builders;
*/
import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Locale;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;
+import org.apache.tika.exception.TikaException;
+import org.apache.tika.io.IOExceptionWithCause;
+import org.apache.tika.parser.ParseContext;
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
@@ -41,16 +42,13 @@ public class CommandLineParserBuilder {
public Options build(InputStream is) throws IOException {
Document doc = null;
- DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
- DocumentBuilder docBuilder = null;
try {
- docBuilder = fact.newDocumentBuilder();
+ DocumentBuilder docBuilder = new ParseContext().getDocumentBuilder();
doc = docBuilder.parse(is);
- } catch (ParserConfigurationException e) {
- throw new IOException(e);
- } catch (SAXException e) {
- throw new IOException(e);
+ } catch (TikaException|SAXException e) {
+ throw new IOExceptionWithCause(e);
}
+
Node docElement = doc.getDocumentElement();
NodeList children = docElement.getChildNodes();
Node commandlineNode = null;
http://git-wip-us.apache.org/repos/asf/tika/blob/172c5844/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java
----------------------------------------------------------------------
diff --git a/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java b/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java
index 7b943f2..0e3acd9 100644
--- a/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java
+++ b/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java
@@ -16,6 +16,8 @@
*/
package org.apache.tika.config;
+import javax.imageio.spi.ServiceRegistry;
+import javax.xml.parsers.DocumentBuilder;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
@@ -33,11 +35,6 @@ import java.util.List;
import java.util.Set;
import java.util.concurrent.ExecutorService;
-import javax.imageio.spi.ServiceRegistry;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
import org.apache.tika.concurrent.ConfigurableThreadPoolExecutor;
import org.apache.tika.concurrent.SimpleThreadPoolExecutor;
import org.apache.tika.detect.CompositeDetector;
@@ -54,6 +51,7 @@ import org.apache.tika.mime.MimeTypesFactory;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.CompositeParser;
import org.apache.tika.parser.DefaultParser;
+import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.apache.tika.parser.ParserDecorator;
import org.w3c.dom.Document;
@@ -351,11 +349,7 @@ public class TikaConfig {
}
private static DocumentBuilder getBuilder() throws TikaException {
- try {
- return DocumentBuilderFactory.newInstance().newDocumentBuilder();
- } catch (ParserConfigurationException e) {
- throw new TikaException("XML parser not available", e);
- }
+ return new ParseContext().getDocumentBuilder();
}
private static Element getChild(Element element, String name) {
http://git-wip-us.apache.org/repos/asf/tika/blob/172c5844/tika-core/src/main/java/org/apache/tika/config/TikaConfigSerializer.java
----------------------------------------------------------------------
diff --git a/tika-core/src/main/java/org/apache/tika/config/TikaConfigSerializer.java b/tika-core/src/main/java/org/apache/tika/config/TikaConfigSerializer.java
index 3c19cfd..e882ca9 100644
--- a/tika-core/src/main/java/org/apache/tika/config/TikaConfigSerializer.java
+++ b/tika-core/src/main/java/org/apache/tika/config/TikaConfigSerializer.java
@@ -17,7 +17,6 @@
package org.apache.tika.config;
import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
@@ -61,8 +60,7 @@ public class TikaConfigSerializer {
*/
public static void serialize(TikaConfig config, Mode mode, Writer writer, Charset charset)
throws Exception {
- DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
- DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
+ DocumentBuilder docBuilder = new ParseContext().getDocumentBuilder();
// root elements
Document doc = docBuilder.newDocument();
http://git-wip-us.apache.org/repos/asf/tika/blob/172c5844/tika-core/src/main/java/org/apache/tika/mime/MimeTypesReader.java
----------------------------------------------------------------------
diff --git a/tika-core/src/main/java/org/apache/tika/mime/MimeTypesReader.java b/tika-core/src/main/java/org/apache/tika/mime/MimeTypesReader.java
index b832b93..abd8cb2 100644
--- a/tika-core/src/main/java/org/apache/tika/mime/MimeTypesReader.java
+++ b/tika-core/src/main/java/org/apache/tika/mime/MimeTypesReader.java
@@ -16,15 +16,7 @@
*/
package org.apache.tika.mime;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
+import javax.xml.XMLConstants;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
@@ -33,6 +25,14 @@ import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXResult;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
import org.w3c.dom.Document;
import org.xml.sax.Attributes;
@@ -116,6 +116,8 @@ public class MimeTypesReader extends DefaultHandler implements MimeTypesReaderMe
try {
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setNamespaceAware(false);
+ factory.setFeature(
+ XMLConstants.FEATURE_SECURE_PROCESSING, true);
SAXParser parser = factory.newSAXParser();
parser.parse(stream, this);
} catch (ParserConfigurationException e) {
http://git-wip-us.apache.org/repos/asf/tika/blob/172c5844/tika-core/src/main/java/org/apache/tika/parser/ParseContext.java
----------------------------------------------------------------------
diff --git a/tika-core/src/main/java/org/apache/tika/parser/ParseContext.java b/tika-core/src/main/java/org/apache/tika/parser/ParseContext.java
index 2ff07e5..9863cbf 100644
--- a/tika-core/src/main/java/org/apache/tika/parser/ParseContext.java
+++ b/tika-core/src/main/java/org/apache/tika/parser/ParseContext.java
@@ -133,7 +133,7 @@ public class ParseContext implements Serializable {
* Returns the SAX parser factory specified in this parsing context.
* If a factory is not explicitly specified, then a default factory
* instance is created and returned. The default factory instance is
- * configured to be namespace-aware and to use
+ * configured to be namespace-aware, not validating, and to use
* {@link XMLConstants#FEATURE_SECURE_PROCESSING secure XML processing}.
*
* @since Apache Tika 0.8
@@ -144,6 +144,7 @@ public class ParseContext implements Serializable {
if (factory == null) {
factory = SAXParserFactory.newInstance();
factory.setNamespaceAware(true);
+ factory.setValidating(false);
try {
factory.setFeature(
XMLConstants.FEATURE_SECURE_PROCESSING, true);
@@ -170,7 +171,7 @@ public class ParseContext implements Serializable {
* @since Apache Tika 1.13
* @return DOM parser factory
*/
- public DocumentBuilderFactory getDocumentBuilderFactory() {
+ private DocumentBuilderFactory getDocumentBuilderFactory() {
//borrowed from Apache POI
DocumentBuilderFactory documentBuilderFactory = get(DocumentBuilderFactory.class);
if (documentBuilderFactory == null) {
@@ -185,28 +186,33 @@ public class ParseContext implements Serializable {
/**
* Returns the DOM builder specified in this parsing context.
- * If a factory is not explicitly specified, then a builder
+ * If a builder is not explicitly specified, then a builder
* instance is created and returned. The builder instance is
- * configured to apply an {@link #IGNORING_ENTITY_RESOLVER}.
+ * configured to apply an {@link #IGNORING_ENTITY_RESOLVER},
+ * and it sets the ErrorHandler to <code>null</code>.
*
* @since Apache Tika 1.13
* @return DOM Builder
*/
- public DocumentBuilder getDocumentBuilder() {
+ public DocumentBuilder getDocumentBuilder() throws TikaException {
+ DocumentBuilder documentBuilder = get(DocumentBuilder.class);
+ if (documentBuilder != null) {
+ return documentBuilder;
+ }
try {
DocumentBuilderFactory documentBuilderFactory = getDocumentBuilderFactory();
- DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
+ documentBuilder = documentBuilderFactory.newDocumentBuilder();
documentBuilder.setEntityResolver(IGNORING_ENTITY_RESOLVER);
documentBuilder.setErrorHandler(null);
return documentBuilder;
} catch (ParserConfigurationException e) {
- throw new IllegalStateException("cannot create a DocumentBuilder", e);
+ throw new TikaException("XML parser not available", e);
}
}
- private static void trySetSAXFeature(DocumentBuilderFactory dbf, String feature, boolean enabled) {
+ private static void trySetSAXFeature(DocumentBuilderFactory dbf, String feature, boolean value) {
try {
- dbf.setFeature(feature, enabled);
+ dbf.setFeature(feature, value);
} catch (Exception|AbstractMethodError e) {
}
}
@@ -241,16 +247,16 @@ public class ParseContext implements Serializable {
*/
public XMLInputFactory getXMLInputFactory() {
XMLInputFactory factory = get(XMLInputFactory.class);
- if (factory == null) {
- factory = XMLInputFactory.newFactory().newFactory();
+ if (factory != null) {
+ return factory;
}
+ factory = XMLInputFactory.newFactory();
tryToSetProperty(factory, XMLInputFactory.IS_NAMESPACE_AWARE, true);
tryToSetProperty(factory, XMLInputFactory.IS_VALIDATING, false);
tryToSetProperty(factory, XMLInputFactory.SUPPORT_DTD, false);
tryToSetProperty(factory, XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, false);
-
factory.setXMLResolver(new XMLResolver() {
@Override
public Object resolveEntity(String publicID, String systemID, String baseURI, String namespace) throws
http://git-wip-us.apache.org/repos/asf/tika/blob/172c5844/tika-core/src/main/java/org/apache/tika/parser/external/ExternalParsersConfigReader.java
----------------------------------------------------------------------
diff --git a/tika-core/src/main/java/org/apache/tika/parser/external/ExternalParsersConfigReader.java b/tika-core/src/main/java/org/apache/tika/parser/external/ExternalParsersConfigReader.java
index d2ca91f..2fd3cb5 100644
--- a/tika-core/src/main/java/org/apache/tika/parser/external/ExternalParsersConfigReader.java
+++ b/tika-core/src/main/java/org/apache/tika/parser/external/ExternalParsersConfigReader.java
@@ -16,6 +16,7 @@
*/
package org.apache.tika.parser.external;
+import javax.xml.parsers.DocumentBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
@@ -27,13 +28,10 @@ import java.util.Set;
import java.util.StringTokenizer;
import java.util.regex.Pattern;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
import org.apache.tika.exception.TikaException;
import org.apache.tika.mime.MediaType;
import org.apache.tika.mime.MimeTypeException;
+import org.apache.tika.parser.ParseContext;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@@ -56,12 +54,9 @@ public final class ExternalParsersConfigReader implements ExternalParsersConfigR
public static List<ExternalParser> read(InputStream stream) throws TikaException, IOException {
try {
- DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
- DocumentBuilder builder = factory.newDocumentBuilder();
+ DocumentBuilder builder = new ParseContext().getDocumentBuilder();
Document document = builder.parse(new InputSource(stream));
return read(document);
- } catch (ParserConfigurationException e) {
- throw new TikaException("Unable to create an XML parser", e);
} catch (SAXException e) {
throw new TikaException("Invalid parser configuration", e);
}
http://git-wip-us.apache.org/repos/asf/tika/blob/172c5844/tika-core/src/test/java/org/apache/tika/parser/mock/MockParser.java
----------------------------------------------------------------------
diff --git a/tika-core/src/test/java/org/apache/tika/parser/mock/MockParser.java b/tika-core/src/test/java/org/apache/tika/parser/mock/MockParser.java
index a920502..510ca69 100644
--- a/tika-core/src/test/java/org/apache/tika/parser/mock/MockParser.java
+++ b/tika-core/src/test/java/org/apache/tika/parser/mock/MockParser.java
@@ -21,8 +21,6 @@ package org.apache.tika.parser.mock;
import static java.nio.charset.StandardCharsets.UTF_8;
import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
@@ -36,6 +34,7 @@ import java.util.Set;
import org.apache.tika.exception.TikaException;
import org.apache.tika.extractor.EmbeddedDocumentExtractor;
import org.apache.tika.extractor.ParsingEmbeddedDocumentExtractor;
+import org.apache.tika.io.IOExceptionWithCause;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.metadata.TikaMetadataKeys;
import org.apache.tika.mime.MediaType;
@@ -80,15 +79,12 @@ public class MockParser extends AbstractParser {
Metadata metadata, ParseContext context) throws IOException,
SAXException, TikaException {
Document doc = null;
- DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
- DocumentBuilder docBuilder = null;
try {
- docBuilder = fact.newDocumentBuilder();
+ DocumentBuilder docBuilder = context.getDocumentBuilder();
doc = docBuilder.parse(stream);
- } catch (ParserConfigurationException e) {
- throw new IOException(e);
} catch (SAXException e) {
- throw new IOException(e);
+ //to distinguish between SAX on read vs SAX while writing
+ throw new IOExceptionWithCause(e);
}
Node root = doc.getDocumentElement();
NodeList actions = root.getChildNodes();
http://git-wip-us.apache.org/repos/asf/tika/blob/172c5844/tika-parsers/src/main/java/org/apache/tika/parser/epub/EpubContentParser.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/epub/EpubContentParser.java b/tika-parsers/src/main/java/org/apache/tika/parser/epub/EpubContentParser.java
index 4debbf0..94b5caa 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/epub/EpubContentParser.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/epub/EpubContentParser.java
@@ -16,16 +16,12 @@
*/
package org.apache.tika.parser.epub;
+import javax.xml.parsers.SAXParser;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collections;
import java.util.Set;
-import javax.xml.XMLConstants;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-
import org.apache.commons.io.input.CloseShieldInputStream;
import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
@@ -36,7 +32,6 @@ import org.apache.tika.sax.OfflineContentHandler;
import org.apache.tika.sax.XHTMLContentHandler;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
-import org.xml.sax.SAXNotRecognizedException;
/**
* Parser for EPUB OPS <code>*.html</code> files.
@@ -54,27 +49,11 @@ public class EpubContentParser extends AbstractParser {
Metadata metadata, ParseContext context)
throws IOException, SAXException, TikaException {
final XHTMLContentHandler xhtml =
- new XHTMLContentHandler(handler,metadata);
-
- try {
- SAXParserFactory factory = SAXParserFactory.newInstance();
- factory.setValidating(false);
- factory.setNamespaceAware(true);
- try {
- factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
- } catch (SAXNotRecognizedException e) {
- // TIKA-329: Some XML parsers do not support the secure-processing
- // feature, even though it's required by JAXP in Java 5. Ignoring
- // the exception is fine here, deployments without this feature
- // are inherently vulnerable to XML denial-of-service attacks.
- }
- SAXParser parser = factory.newSAXParser();
- parser.parse(
- new CloseShieldInputStream(stream),
- new OfflineContentHandler(xhtml));
- } catch (ParserConfigurationException e) {
- throw new TikaException("XML parser configuration error", e);
- }
+ new XHTMLContentHandler(handler, metadata);
+ SAXParser parser = context.getSAXParser();
+ parser.parse(
+ new CloseShieldInputStream(stream),
+ new OfflineContentHandler(xhtml));
}
}
http://git-wip-us.apache.org/repos/asf/tika/blob/172c5844/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XSSFExcelExtractorDecorator.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XSSFExcelExtractorDecorator.java b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XSSFExcelExtractorDecorator.java
index 5006d0b..0e44abd 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XSSFExcelExtractorDecorator.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/microsoft/ooxml/XSSFExcelExtractorDecorator.java
@@ -16,9 +16,7 @@
*/
package org.apache.tika.parser.microsoft.ooxml;
-import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
@@ -70,11 +68,13 @@ public class XSSFExcelExtractorDecorator extends AbstractOOXMLExtractor {
private final DataFormatter formatter;
private final List<PackagePart> sheetParts = new ArrayList<PackagePart>();
private Metadata metadata;
+ private ParseContext parseContext;
public XSSFExcelExtractorDecorator(
ParseContext context, XSSFEventBasedExcelExtractor extractor, Locale locale) {
super(context, extractor);
+ this.parseContext = context;
this.extractor = extractor;
extractor.setFormulasNotResults(false);
extractor.setLocale(locale);
@@ -92,6 +92,7 @@ public class XSSFExcelExtractorDecorator extends AbstractOOXMLExtractor {
throws SAXException, XmlException, IOException, TikaException {
this.metadata = metadata;
+ this.parseContext = context;
metadata.set(TikaMetadataKeys.PROTECTED, "false");
super.getXHTML(handler, metadata, context);
@@ -186,10 +187,8 @@ public class XSSFExcelExtractorDecorator extends AbstractOOXMLExtractor {
InputStream sheetInputStream)
throws IOException, SAXException {
InputSource sheetSource = new InputSource(sheetInputStream);
- SAXParserFactory saxFactory = SAXParserFactory.newInstance();
- saxFactory.setNamespaceAware(true);
try {
- SAXParser saxParser = saxFactory.newSAXParser();
+ SAXParser saxParser = parseContext.getSAXParser();
XMLReader sheetParser = saxParser.getXMLReader();
XSSFSheetInterestingPartsCapturer handler =
new XSSFSheetInterestingPartsCapturer(new XSSFSheetXMLHandler(
@@ -201,7 +200,7 @@ public class XSSFExcelExtractorDecorator extends AbstractOOXMLExtractor {
if (handler.hasProtection) {
metadata.set(TikaMetadataKeys.PROTECTED, "true");
}
- } catch (ParserConfigurationException e) {
+ } catch (TikaException e) {
throw new RuntimeException("SAX parser appears to be broken - " + e.getMessage());
}
}
http://git-wip-us.apache.org/repos/asf/tika/blob/172c5844/tika-parsers/src/main/java/org/apache/tika/parser/odf/OpenDocumentContentParser.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/odf/OpenDocumentContentParser.java b/tika-parsers/src/main/java/org/apache/tika/parser/odf/OpenDocumentContentParser.java
index 1bf3f7f..a32d406 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/odf/OpenDocumentContentParser.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/odf/OpenDocumentContentParser.java
@@ -16,12 +16,10 @@
*/
package org.apache.tika.parser.odf;
-import javax.xml.XMLConstants;
+import static org.apache.tika.sax.XHTMLContentHandler.XHTML;
+
import javax.xml.namespace.QName;
-import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-
import java.io.IOException;
import java.io.InputStream;
import java.util.BitSet;
@@ -38,18 +36,15 @@ import org.apache.tika.mime.MediaType;
import org.apache.tika.parser.AbstractParser;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.sax.ElementMappingContentHandler;
+import org.apache.tika.sax.ElementMappingContentHandler.TargetElement;
import org.apache.tika.sax.OfflineContentHandler;
import org.apache.tika.sax.XHTMLContentHandler;
-import org.apache.tika.sax.ElementMappingContentHandler.TargetElement;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
-import org.xml.sax.SAXNotRecognizedException;
import org.xml.sax.helpers.AttributesImpl;
import org.xml.sax.helpers.DefaultHandler;
-import static org.apache.tika.sax.XHTMLContentHandler.XHTML;
-
/**
* Parser for ODF <code>content.xml</code> files.
*/
@@ -490,26 +485,12 @@ public class OpenDocumentContentParser extends AbstractParser {
DefaultHandler dh = new OpenDocumentElementMappingContentHandler(handler, MAPPINGS);
- try {
- SAXParserFactory factory = SAXParserFactory.newInstance();
- factory.setValidating(false);
- factory.setNamespaceAware(true);
- try {
- factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
- } catch (SAXNotRecognizedException e) {
- // TIKA-329: Some XML parsers do not support the secure-processing
- // feature, even though it's required by JAXP in Java 5. Ignoring
- // the exception is fine here, deployments without this feature
- // are inherently vulnerable to XML denial-of-service attacks.
- }
- SAXParser parser = factory.newSAXParser();
- parser.parse(
- new CloseShieldInputStream(stream),
- new OfflineContentHandler(
- new NSNormalizerContentHandler(dh)));
- } catch (ParserConfigurationException e) {
- throw new TikaException("XML parser configuration error", e);
- }
+
+ SAXParser parser = context.getSAXParser();
+ parser.parse(
+ new CloseShieldInputStream(stream),
+ new OfflineContentHandler(
+ new NSNormalizerContentHandler(dh)));
}
}
http://git-wip-us.apache.org/repos/asf/tika/blob/172c5844/tika-parsers/src/main/java/org/apache/tika/parser/pdf/PDFParser.java
----------------------------------------------------------------------
diff --git a/tika-parsers/src/main/java/org/apache/tika/parser/pdf/PDFParser.java b/tika-parsers/src/main/java/org/apache/tika/parser/pdf/PDFParser.java
index e102d27..b677d84 100644
--- a/tika-parsers/src/main/java/org/apache/tika/parser/pdf/PDFParser.java
+++ b/tika-parsers/src/main/java/org/apache/tika/parser/pdf/PDFParser.java
@@ -602,7 +602,7 @@ public class PDFParser extends AbstractParser {
DocumentBuilder documentBuilder = context.getDocumentBuilder();
documentBuilder.setErrorHandler((ErrorHandler)null);
return documentBuilder.parse(is);
- } catch (IOException|SAXException e) {
+ } catch (IOException|SAXException|TikaException e) {
//swallow
}
return null;