diff --git a/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/ImageFormatFilter.java b/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/ImageFormatFilter.java new file mode 100644 index 00000000..284cb82b --- /dev/null +++ b/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/ImageFormatFilter.java @@ -0,0 +1,36 @@ +package com.twelvemonkeys.imageio.plugins.jpeg; + +import javax.imageio.spi.ImageReaderSpi; +import javax.imageio.spi.ImageWriterSpi; +import javax.imageio.spi.ServiceRegistry; + +public class ImageFormatFilter implements ServiceRegistry.Filter { + String name; + + public ImageFormatFilter (String name) { + this.name = name; + } + + public boolean filter (Object obj) { + try { + if (obj instanceof ImageReaderSpi) { + return contains(((ImageReaderSpi) obj).getFormatNames(), name); + } else if (obj instanceof ImageWriterSpi) { + return contains(((ImageWriterSpi) obj).getFormatNames(), name); + } else { + return false; + } + } catch (Exception e) { + return false; + } + } + + private static boolean contains (String[] names, String name) { + for (int i = 0; i < names.length; i++) { + if (name.equalsIgnoreCase(names[i])) { + return true; + } + } + return false; + } +} \ No newline at end of file diff --git a/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReaderSpi.java b/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReaderSpi.java index 72155d33..0550fa90 100644 --- a/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReaderSpi.java +++ b/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageReaderSpi.java @@ -38,6 +38,7 @@ import javax.imageio.spi.ImageReaderSpi; import javax.imageio.spi.ServiceRegistry; import javax.imageio.stream.ImageInputStream; import java.io.IOException; +import java.util.Iterator; import java.util.Locale; /** @@ -85,14 +86,13 @@ public class JPEGImageReaderSpi extends ImageReaderSpi { } static ImageReaderSpi lookupDelegateProvider(final ServiceRegistry registry) { - // Should be safe to lookup now, as the bundled providers are hardcoded usually - try { - return (ImageReaderSpi) registry.getServiceProviderByClass(Class.forName("com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi")); - } - catch (ClassNotFoundException ignore) { - } - catch (SecurityException e) { - e.printStackTrace(); + Iterator it = registry.getServiceProviders(ImageReaderSpi.class, new ImageFormatFilter("JPEG"), true); + + while (it.hasNext()) { + ImageReaderSpi imageReaderSpi = it.next(); + if (imageReaderSpi.getClass().getCanonicalName().equals("com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi")) { + return imageReaderSpi; + } } return null; diff --git a/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageWriterSpi.java b/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageWriterSpi.java index 735e7a0c..2a9cce80 100644 --- a/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageWriterSpi.java +++ b/imageio/imageio-jpeg/src/main/java/com/twelvemonkeys/imageio/plugins/jpeg/JPEGImageWriterSpi.java @@ -39,6 +39,7 @@ import javax.imageio.spi.ImageWriterSpi; import javax.imageio.spi.ServiceRegistry; import java.awt.image.RenderedImage; import java.io.IOException; +import java.util.Iterator; import java.util.Locale; /** @@ -86,14 +87,13 @@ public class JPEGImageWriterSpi extends ImageWriterSpi { } static ImageWriterSpi lookupDelegateProvider(final ServiceRegistry registry) { - // Should be safe to lookup now, as the bundled providers are hardcoded usually - try { - return (ImageWriterSpi) registry.getServiceProviderByClass(Class.forName("com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi")); - } - catch (ClassNotFoundException ignore) { - } - catch (SecurityException e) { - e.printStackTrace(); + Iterator it = registry.getServiceProviders(ImageWriterSpi.class, new ImageFormatFilter("JPEG"), true); + + while (it.hasNext()) { + ImageWriterSpi imageWriterSpi = it.next(); + if (imageWriterSpi.getClass().getCanonicalName().equals("com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi")) { + return imageWriterSpi; + } } return null;