Added an utility to load and insatiate classes

Project: http://git-wip-us.apache.org/repos/asf/tika/repo
Commit: http://git-wip-us.apache.org/repos/asf/tika/commit/eccc1538
Tree: http://git-wip-us.apache.org/repos/asf/tika/tree/eccc1538
Diff: http://git-wip-us.apache.org/repos/asf/tika/diff/eccc1538

Branch: refs/heads/master
Commit: eccc15387f0d4a5c62d8d12e6579878dba2f52a8
Parents: 9b5dc7f
Author: Thamme Gowda <[email protected]>
Authored: Sat Jun 11 19:04:28 2016 -0700
Committer: Thamme Gowda <[email protected]>
Committed: Sat Jun 11 19:04:28 2016 -0700

----------------------------------------------------------------------
 .../apache/tika/utils/ServiceLoaderUtils.java   | 30 ++++++++++++++++++++
 1 file changed, 30 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tika/blob/eccc1538/tika-core/src/main/java/org/apache/tika/utils/ServiceLoaderUtils.java
----------------------------------------------------------------------
diff --git 
a/tika-core/src/main/java/org/apache/tika/utils/ServiceLoaderUtils.java 
b/tika-core/src/main/java/org/apache/tika/utils/ServiceLoaderUtils.java
index 5ee1fe8..a1ccacb 100644
--- a/tika-core/src/main/java/org/apache/tika/utils/ServiceLoaderUtils.java
+++ b/tika-core/src/main/java/org/apache/tika/utils/ServiceLoaderUtils.java
@@ -20,6 +20,8 @@ import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
 
+import org.apache.tika.config.ServiceLoader;
+
 /**
  * Service Loading and Ordering related utils
  */
@@ -45,4 +47,32 @@ public class ServiceLoaderUtils {
             }
         });
     }
+
+    /**
+     * Loads a class and instantiates it
+     * @param className service class name
+     * @param <T> service type
+     * @return instance of service
+     */
+    public static <T> T newInstance(String className) {
+        return newInstance(className, ServiceLoader.class.getClassLoader());
+    }
+
+    /**
+     * Loads a class and instantiates it
+     * @param className service class name
+     * @param loader class loader
+     * @param <T> service type
+     * @return instance of service
+     */
+    public static <T> T newInstance(String className, ClassLoader loader){
+        try {
+            Class loadedClass = loader.loadClass(className);
+            Class<T> castedClass = loadedClass;
+            T instance = castedClass.newInstance();
+            return instance;
+        } catch (ClassNotFoundException | InstantiationException | 
IllegalAccessException e) {
+            throw new RuntimeException(e);
+        }
+    }
 }

Reply via email to