You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ni...@apache.org on 2011/10/18 15:52:09 UTC
svn commit: r1185658 - in
/tika/trunk/tika-core/src/main/java/org/apache/tika: Tika.java
config/TikaConfig.java parser/AutoDetectParser.java
Author: nick
Date: Tue Oct 18 13:52:09 2011
New Revision: 1185658
URL: http://svn.apache.org/viewvc?rev=1185658&view=rev
Log:
TIKA-755 Have TikaConfig create a DefaultDetector instance based on the supplied MimeTypes and/or ClassLoader, and switch Tika+AutoDetectParser to get their detector from there, rather than create their own DefaultDetector instance
Modified:
tika/trunk/tika-core/src/main/java/org/apache/tika/Tika.java
tika/trunk/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java
tika/trunk/tika-core/src/main/java/org/apache/tika/parser/AutoDetectParser.java
Modified: tika/trunk/tika-core/src/main/java/org/apache/tika/Tika.java
URL: http://svn.apache.org/viewvc/tika/trunk/tika-core/src/main/java/org/apache/tika/Tika.java?rev=1185658&r1=1185657&r2=1185658&view=diff
==============================================================================
--- tika/trunk/tika-core/src/main/java/org/apache/tika/Tika.java (original)
+++ tika/trunk/tika-core/src/main/java/org/apache/tika/Tika.java Tue Oct 18 13:52:09 2011
@@ -24,7 +24,6 @@ import java.io.Reader;
import java.net.URL;
import org.apache.tika.config.TikaConfig;
-import org.apache.tika.detect.DefaultDetector;
import org.apache.tika.detect.Detector;
import org.apache.tika.exception.TikaException;
import org.apache.tika.io.TikaInputStream;
@@ -83,8 +82,7 @@ public class Tika {
* @param config Tika configuration
*/
public Tika(TikaConfig config) {
- this(new DefaultDetector(config.getMimeRepository()),
- new AutoDetectParser(config));
+ this(config.getDetector(), new AutoDetectParser(config));
}
/**
Modified: tika/trunk/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java
URL: http://svn.apache.org/viewvc/tika/trunk/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java?rev=1185658&r1=1185657&r2=1185658&view=diff
==============================================================================
--- tika/trunk/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java (original)
+++ tika/trunk/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java Tue Oct 18 13:52:09 2011
@@ -32,6 +32,9 @@ import javax.xml.parsers.DocumentBuilder
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
+import org.apache.tika.detect.CompositeDetector;
+import org.apache.tika.detect.DefaultDetector;
+import org.apache.tika.detect.Detector;
import org.apache.tika.exception.TikaException;
import org.apache.tika.mime.MediaType;
import org.apache.tika.mime.MediaTypeRegistry;
@@ -54,6 +57,7 @@ import org.xml.sax.SAXException;
public class TikaConfig {
private final CompositeParser parser;
+ private final Detector detector;
private final MimeTypes mimeTypes;
@@ -111,6 +115,7 @@ public class TikaConfig {
public TikaConfig(Element element, ClassLoader loader)
throws TikaException, IOException {
this.mimeTypes = typesFromDomElement(element);
+ this.detector = detectorFromDomElement(element, mimeTypes, loader);
this.parser = parserFromDomElement(element, mimeTypes, loader);
}
@@ -128,8 +133,9 @@ public class TikaConfig {
*/
public TikaConfig(ClassLoader loader)
throws MimeTypeException, IOException {
- this.parser = new DefaultParser(loader);
this.mimeTypes = MimeTypes.getDefaultMimeTypes();
+ this.detector = new DefaultDetector(mimeTypes, loader);
+ this.parser = new DefaultParser(mimeTypes.getMediaTypeRegistry(), loader);
}
/**
@@ -159,6 +165,8 @@ public class TikaConfig {
this.mimeTypes = MimeTypes.getDefaultMimeTypes();
this.parser = new DefaultParser(
mimeTypes.getMediaTypeRegistry(), loader);
+ this.detector = new DefaultDetector(
+ MimeTypes.getDefaultMimeTypes(), loader);
} else {
InputStream stream;
File file = new File(config);
@@ -174,6 +182,8 @@ public class TikaConfig {
this.mimeTypes = typesFromDomElement(element);
this.parser =
parserFromDomElement(element, mimeTypes, loader);
+ this.detector =
+ detectorFromDomElement(element, mimeTypes, loader);
} catch (SAXException e) {
throw new TikaException(
"Specified Tika configuration has syntax errors: "
@@ -235,6 +245,15 @@ public class TikaConfig {
return parser.getParsers();
}
+ /**
+ * Returns the configured detector instance.
+ *
+ * @return configured detector
+ */
+ public Detector getDetector() {
+ return detector;
+ }
+
public MimeTypes getMimeRepository(){
return mimeTypes;
}
@@ -361,4 +380,36 @@ public class TikaConfig {
return new CompositeParser(mimeTypes.getMediaTypeRegistry(), parsers);
}
+ private static Detector detectorFromDomElement(
+ Element element, MimeTypes mimeTypes, ClassLoader loader)
+ throws TikaException, IOException {
+ List<Detector> detectors = new ArrayList<Detector>();
+ NodeList nodes = element.getElementsByTagName("detector");
+ for (int i = 0; i < nodes.getLength(); i++) {
+ Element node = (Element) nodes.item(i);
+ String name = node.getAttribute("class");
+
+ try {
+ Class<?> detectorClass = Class.forName(name, true, loader);
+ Object instance = detectorClass.newInstance();
+ if (!(instance instanceof Detector)) {
+ throw new TikaException(
+ "Configured class is not a Tika Detector: " + name);
+ }
+ Detector detector = (Detector) instance;
+ detectors.add(detector);
+ } catch (ClassNotFoundException e) {
+ throw new TikaException(
+ "Configured detector class not found: " + name, e);
+ } catch (IllegalAccessException e) {
+ throw new TikaException(
+ "Unable to access a detector class: " + name, e);
+ } catch (InstantiationException e) {
+ throw new TikaException(
+ "Unable to instantiate a detector class: " + name, e);
+ }
+ }
+
+ return new CompositeDetector(mimeTypes.getMediaTypeRegistry(), detectors);
+ }
}
Modified: tika/trunk/tika-core/src/main/java/org/apache/tika/parser/AutoDetectParser.java
URL: http://svn.apache.org/viewvc/tika/trunk/tika-core/src/main/java/org/apache/tika/parser/AutoDetectParser.java?rev=1185658&r1=1185657&r2=1185658&view=diff
==============================================================================
--- tika/trunk/tika-core/src/main/java/org/apache/tika/parser/AutoDetectParser.java (original)
+++ tika/trunk/tika-core/src/main/java/org/apache/tika/parser/AutoDetectParser.java Tue Oct 18 13:52:09 2011
@@ -76,7 +76,7 @@ public class AutoDetectParser extends Co
public AutoDetectParser(TikaConfig config) {
super(config.getMediaTypeRegistry(), config.getParser());
- setDetector(new DefaultDetector(config.getMimeRepository()));
+ setDetector(config.getDetector());
}
/**
@@ -84,7 +84,7 @@ public class AutoDetectParser extends Co
*/
public void setConfig(TikaConfig config) {
setParsers(config.getParsers());
- setDetector(new DefaultDetector(config.getMimeRepository()));
+ setDetector(config.getDetector());
setMediaTypeRegistry(config.getMediaTypeRegistry());
}