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


Reply via email to