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