< 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 >