--- old/src/java.xml.bind/share/classes/javax/xml/bind/ServiceLoaderUtil.java 2015-05-15 17:06:49.000000000 +0200 +++ new/src/java.xml.bind/share/classes/javax/xml/bind/ServiceLoaderUtil.java 2015-05-15 17:06:49.000000000 +0200 @@ -28,6 +28,7 @@ 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; @@ -49,12 +50,16 @@ 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 firstByServiceLoader(Class

spiClass, Logger logger) { + static P firstByServiceLoader(Class

spiClass, Logger logger, ExceptionHandler handler) throws T { // service discovery - ServiceLoader

serviceLoader = ServiceLoader.load(spiClass); - for (P impl : serviceLoader) { - logger.fine("ServiceProvider loading Facility used; returning object [" + impl.getClass().getName() + "]"); - return impl; + try { + ServiceLoader

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; } @@ -83,7 +88,7 @@ } 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; }