Alternative fix for #650: Allow usage in OSGi environment.

This commit is contained in:
Harald Kuhr 2021-12-23 11:02:27 +01:00
parent e016e970e5
commit f50178bc78

View File

@ -45,6 +45,7 @@ import java.io.BufferedInputStream;
import java.io.BufferedOutputStream; import java.io.BufferedOutputStream;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.util.Iterator;
import java.util.SortedSet; import java.util.SortedSet;
import java.util.TreeSet; import java.util.TreeSet;
@ -175,15 +176,22 @@ public final class IIOUtil {
* @param providerClassName name of the provider class. * @param providerClassName name of the provider class.
* @param category provider category * @param category provider category
* *
* @return the provider instance, or {@code null}. * @return the provider instance, or {@code null} if not found
*/ */
public static <T> T lookupProviderByName(final ServiceRegistry registry, final String providerClassName, Class<T> category) { public static <T> T lookupProviderByName(final ServiceRegistry registry, final String providerClassName, Class<T> category) {
try { // NOTE: While more verbose, this is more OSGi-friendly than using
return category.cast(registry.getServiceProviderByClass(Class.forName(providerClassName))); // registry.getServiceProviderByClass(Class.forName(providerClassName))
} Iterator<T> providers = registry.getServiceProviders(category, true);
catch (ClassNotFoundException ignore) {
return null; while (providers.hasNext()) {
T provider = providers.next();
if (provider.getClass().getName().equals(providerClassName)) {
return provider;
}
} }
return null;
} }
/** /**