mirror of
https://github.com/haraldk/TwelveMonkeys.git
synced 2025-08-05 04:25:29 -04:00
Support registration of JPEG plugins when the classloader can't find sun plugins.
In some situations, the classloader may not be able to find the sun jpeg plugins even if they are registered. In this case, we can still find the sun plugins by iterating over all the registered plugins.
This commit is contained in:
parent
b9f04059bf
commit
bb4e77406a
@ -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;
|
||||||
|
}
|
||||||
|
}
|
@ -38,6 +38,7 @@ import javax.imageio.spi.ImageReaderSpi;
|
|||||||
import javax.imageio.spi.ServiceRegistry;
|
import javax.imageio.spi.ServiceRegistry;
|
||||||
import javax.imageio.stream.ImageInputStream;
|
import javax.imageio.stream.ImageInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -85,17 +86,17 @@ public class JPEGImageReaderSpi extends ImageReaderSpi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static ImageReaderSpi lookupDelegateProvider(final ServiceRegistry registry) {
|
static ImageReaderSpi lookupDelegateProvider(final ServiceRegistry registry) {
|
||||||
// Should be safe to lookup now, as the bundled providers are hardcoded usually
|
Iterator<ImageReaderSpi> it = registry.getServiceProviders(ImageReaderSpi.class, new ImageFormatFilter("JPEG"), true);
|
||||||
try {
|
|
||||||
return (ImageReaderSpi) registry.getServiceProviderByClass(Class.forName("com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi"));
|
ImageReaderSpi ret = null;
|
||||||
}
|
while (it.hasNext()) {
|
||||||
catch (ClassNotFoundException ignore) {
|
ImageReaderSpi imageReaderSpi = it.next();
|
||||||
}
|
if (imageReaderSpi.getClass().getCanonicalName().equals("com.sun.imageio.plugins.jpeg.JPEGImageReaderSpi")) {
|
||||||
catch (SecurityException e) {
|
ret = imageReaderSpi;
|
||||||
e.printStackTrace();
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings({"unchecked"})
|
@SuppressWarnings({"unchecked"})
|
||||||
|
@ -39,6 +39,7 @@ import javax.imageio.spi.ImageWriterSpi;
|
|||||||
import javax.imageio.spi.ServiceRegistry;
|
import javax.imageio.spi.ServiceRegistry;
|
||||||
import java.awt.image.RenderedImage;
|
import java.awt.image.RenderedImage;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -86,17 +87,17 @@ public class JPEGImageWriterSpi extends ImageWriterSpi {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static ImageWriterSpi lookupDelegateProvider(final ServiceRegistry registry) {
|
static ImageWriterSpi lookupDelegateProvider(final ServiceRegistry registry) {
|
||||||
// Should be safe to lookup now, as the bundled providers are hardcoded usually
|
Iterator<ImageWriterSpi> it = registry.getServiceProviders(ImageWriterSpi.class, new ImageFormatFilter("JPEG"), true);
|
||||||
try {
|
|
||||||
return (ImageWriterSpi) registry.getServiceProviderByClass(Class.forName("com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi"));
|
ImageWriterSpi ret = null;
|
||||||
}
|
while (it.hasNext()) {
|
||||||
catch (ClassNotFoundException ignore) {
|
ImageWriterSpi imageWriterSpi = it.next();
|
||||||
}
|
if (imageWriterSpi.getClass().getCanonicalName().equals("com.sun.imageio.plugins.jpeg.JPEGImageWriterSpi")) {
|
||||||
catch (SecurityException e) {
|
ret = imageWriterSpi;
|
||||||
e.printStackTrace();
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings({"unchecked"})
|
@SuppressWarnings({"unchecked"})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user