< prev index next >

src/java.xml.bind/share/classes/javax/xml/bind/ServiceLoaderUtil.java

Print this page

        

@@ -26,10 +26,11 @@
 package javax.xml.bind;
 
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.Iterator;
 import java.util.Properties;

@@ -47,17 +48,21 @@
 class ServiceLoaderUtil {
 
     private static final String OSGI_SERVICE_LOADER_CLASS_NAME = "com.sun.org.glassfish.hk2.osgiresourcelocator.ServiceLoader";
     private static final String OSGI_SERVICE_LOADER_METHOD_NAME = "lookupProviderClasses";
 
-    static <P> P firstByServiceLoader(Class<P> spiClass, Logger logger) {
+    static <P, T extends Exception> P firstByServiceLoader(Class<P> spiClass, Logger logger, ExceptionHandler<T> handler) throws T {
         // service discovery
+        try {
         ServiceLoader<P> serviceLoader = ServiceLoader.load(spiClass);
         for (P impl : serviceLoader) {
             logger.fine("ServiceProvider loading Facility used; returning object [" + impl.getClass().getName() + "]");
             return impl;
         }
+        } catch (Throwable t) {
+            throw handler.createException(t, "Error while searching for service [" + spiClass.getName() + "]");
+        }
         return null;
     }
 
     static boolean isOsgi(Logger logger) {
         try {

@@ -81,11 +86,11 @@
                 logger.fine("Found implementation using OSGi facility; returning object [" + next.getClass().getName() + "].");
                 return next;
             } else {
                 return null;
             }
-        } catch (Exception ignored) {
+        } catch (IllegalAccessException | InvocationTargetException | ClassNotFoundException | NoSuchMethodException ignored) {
             logger.log(Level.FINE, "Unable to find from OSGi: [" + factoryId + "]", ignored);
             return null;
         }
     }
 
< prev index next >