Author: nick
Date: Thu Sep 24 22:59:15 2015
New Revision: 1705191
URL: http://svn.apache.org/viewvc?rev=1705191&view=rev
Log:
Expose the ServiceLoader used by TikaConfig, and use that to support
serialising the service loader config xml section
Modified:
tika/trunk/tika-core/src/main/java/org/apache/tika/config/LoadErrorHandler.java
tika/trunk/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java
tika/trunk/tika-example/src/main/java/org/apache/tika/example/DumpTikaConfigExample.java
Modified:
tika/trunk/tika-core/src/main/java/org/apache/tika/config/LoadErrorHandler.java
URL:
http://svn.apache.org/viewvc/tika/trunk/tika-core/src/main/java/org/apache/tika/config/LoadErrorHandler.java?rev=1705191&r1=1705190&r2=1705191&view=diff
==============================================================================
---
tika/trunk/tika-core/src/main/java/org/apache/tika/config/LoadErrorHandler.java
(original)
+++
tika/trunk/tika-core/src/main/java/org/apache/tika/config/LoadErrorHandler.java
Thu Sep 24 22:59:15 2015
@@ -46,6 +46,10 @@ public interface LoadErrorHandler {
LoadErrorHandler IGNORE = new LoadErrorHandler() {
public void handleLoadError(String classname, Throwable throwable) {
}
+ @Override
+ public String toString() {
+ return "IGNORE";
+ }
};
/**
@@ -57,6 +61,10 @@ public interface LoadErrorHandler {
Logger.getLogger(classname).log(
Level.WARNING, "Unable to load " + classname, throwable);
}
+ @Override
+ public String toString() {
+ return "WARN";
+ }
};
/**
@@ -68,6 +76,9 @@ public interface LoadErrorHandler {
public void handleLoadError(String classname, Throwable throwable) {
throw new RuntimeException("Unable to load " + classname,
throwable);
}
+ @Override
+ public String toString() {
+ return "THROW";
+ }
};
-
}
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=1705191&r1=1705190&r2=1705191&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
Thu Sep 24 22:59:15 2015
@@ -79,6 +79,7 @@ public class TikaConfig {
private static Translator getDefaultTranslator(ServiceLoader loader) {
return new DefaultTranslator(loader);
}
+ private final ServiceLoader serviceLoader;
private final CompositeParser parser;
private final CompositeDetector detector;
private final Translator translator;
@@ -143,6 +144,7 @@ public class TikaConfig {
this.detector = detectorLoader.loadOverall(element, mimeTypes, loader);
this.parser = parserLoader.loadOverall(element, mimeTypes, loader);
this.translator = translatorLoader.loadOverall(element, mimeTypes,
loader);
+ this.serviceLoader = loader;
}
/**
@@ -159,7 +161,7 @@ public class TikaConfig {
*/
public TikaConfig(ClassLoader loader)
throws MimeTypeException, IOException {
- ServiceLoader serviceLoader = new ServiceLoader(loader);
+ this.serviceLoader = new ServiceLoader(loader);
this.mimeTypes = getDefaultMimeTypes(loader);
this.detector = getDefaultDetector(mimeTypes, serviceLoader);
this.parser = getDefaultParser(mimeTypes, serviceLoader);
@@ -184,7 +186,7 @@ public class TikaConfig {
* @throws TikaException if problem with MimeTypes or parsing XML config
*/
public TikaConfig() throws TikaException, IOException {
- ServiceLoader loader = new ServiceLoader();
+ this.serviceLoader = new ServiceLoader();
String config = System.getProperty("tika.config");
if (config == null) {
@@ -193,9 +195,9 @@ public class TikaConfig {
if (config == null) {
this.mimeTypes =
getDefaultMimeTypes(ServiceLoader.getContextClassLoader());
- this.parser = getDefaultParser(mimeTypes, loader);
- this.detector = getDefaultDetector(mimeTypes, loader);
- this.translator = getDefaultTranslator(loader);
+ this.parser = getDefaultParser(mimeTypes, serviceLoader);
+ this.detector = getDefaultDetector(mimeTypes, serviceLoader);
+ this.translator = getDefaultTranslator(serviceLoader);
} else {
// Locate the given configuration file
InputStream stream = null;
@@ -210,7 +212,7 @@ public class TikaConfig {
}
}
if (stream == null) {
- stream = loader.getResourceAsStream(config);
+ stream = serviceLoader.getResourceAsStream(config);
}
if (stream == null) {
throw new TikaException(
@@ -224,9 +226,9 @@ public class TikaConfig {
TranslatorXmlLoader translatorLoader = new
TranslatorXmlLoader();
this.mimeTypes = typesFromDomElement(element);
- this.parser = parserLoader.loadOverall(element, mimeTypes,
loader);
- this.detector = detectorLoader.loadOverall(element, mimeTypes,
loader);
- this.translator = translatorLoader.loadOverall(element,
mimeTypes, loader);
+ this.parser = parserLoader.loadOverall(element, mimeTypes,
serviceLoader);
+ this.detector = detectorLoader.loadOverall(element, mimeTypes,
serviceLoader);
+ this.translator = translatorLoader.loadOverall(element,
mimeTypes, serviceLoader);
} catch (SAXException e) {
throw new TikaException(
"Specified Tika configuration has syntax errors: "
@@ -293,6 +295,10 @@ public class TikaConfig {
public MediaTypeRegistry getMediaTypeRegistry() {
return mimeTypes.getMediaTypeRegistry();
}
+
+ public ServiceLoader getServiceLoader() {
+ return serviceLoader;
+ }
/**
* Provides a default configuration (TikaConfig). Currently creates a
@@ -412,9 +418,9 @@ public class TikaConfig {
boolean dynamic =
Boolean.parseBoolean(serviceLoaderElement.getAttribute("dynamic"));
LoadErrorHandler loadErrorHandler = LoadErrorHandler.IGNORE;
String loadErrorHandleConfig =
serviceLoaderElement.getAttribute("loadErrorHandler");
- if("WARN".equalsIgnoreCase(loadErrorHandleConfig)) {
+
if(LoadErrorHandler.WARN.toString().equalsIgnoreCase(loadErrorHandleConfig)) {
loadErrorHandler = LoadErrorHandler.WARN;
- } else if("THROW".equalsIgnoreCase(loadErrorHandleConfig)) {
+ } else
if(LoadErrorHandler.THROW.toString().equalsIgnoreCase(loadErrorHandleConfig)) {
loadErrorHandler = LoadErrorHandler.THROW;
}
Modified:
tika/trunk/tika-example/src/main/java/org/apache/tika/example/DumpTikaConfigExample.java
URL:
http://svn.apache.org/viewvc/tika/trunk/tika-example/src/main/java/org/apache/tika/example/DumpTikaConfigExample.java?rev=1705191&r1=1705190&r2=1705191&view=diff
==============================================================================
---
tika/trunk/tika-example/src/main/java/org/apache/tika/example/DumpTikaConfigExample.java
(original)
+++
tika/trunk/tika-example/src/main/java/org/apache/tika/example/DumpTikaConfigExample.java
Thu Sep 24 22:59:15 2015
@@ -37,6 +37,8 @@ import javax.xml.transform.TransformerFa
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
+import org.apache.tika.config.LoadErrorHandler;
+import org.apache.tika.config.ServiceLoader;
import org.apache.tika.config.TikaConfig;
import org.apache.tika.detect.CompositeDetector;
import org.apache.tika.detect.DefaultDetector;
@@ -80,6 +82,7 @@ public class DumpTikaConfigExample {
doc.appendChild(rootElement);
addMimeComment(mode, rootElement, doc);
+ addServiceLoader(mode, rootElement, doc, config);
addTranslator(mode, rootElement, doc, config);
addDetectors(mode, rootElement, doc, config);
addParsers(mode, rootElement, doc, config);
@@ -97,6 +100,23 @@ public class DumpTikaConfigExample {
transformer.transform(source, result);
}
+ private void addServiceLoader(Mode mode, Element rootElement, Document
doc, TikaConfig config) {
+ ServiceLoader loader = config.getServiceLoader();
+
+ if (mode == Mode.MINIMAL) {
+ // Is this the default?
+ if (loader.isDynamic() && loader.getLoadErrorHandler() ==
LoadErrorHandler.IGNORE) {
+ // Default config, no need to output anything
+ return;
+ }
+ }
+
+ Element dslEl = doc.createElement("service-loader");
+ dslEl.setAttribute("dynamic", Boolean.toString(loader.isDynamic()));
+ dslEl.setAttribute("loadErrorHandler",
loader.getLoadErrorHandler().toString());
+ rootElement.appendChild(dslEl);
+ }
+
private void addTranslator(Mode mode, Element rootElement, Document doc,
TikaConfig config) {
// Unlike the other entries, TikaConfig only wants one of
// these, and no outer <translators> list