@Test public void testDestroyConcurrentModRegression() { ServletContext context = mock(ServletContext.class); ServletContextEvent destroyed = mock(ServletContextEvent.class); when(destroyed.getServletContext()).thenReturn(context); ServletContextListener listener = new IIOProviderContextListener(); listener.contextInitialized(mock(ServletContextEvent.class)); ImageReaderSpi provider1 = new MockImageReaderSpiOne(); ImageReaderSpi provider2 = new MockImageReaderSpiToo(); // NOTE: Fake registering for simplicity, but it still exposes the original problem with de-registering IIORegistry registry = IIORegistry.getDefaultInstance(); registry.registerServiceProvider(provider1); registry.registerServiceProvider(provider2); assertTrue(registry.contains(provider1)); assertTrue(registry.contains(provider2)); listener.contextDestroyed(destroyed); assertFalse(registry.contains(provider1)); assertFalse(registry.contains(provider2)); }
IIORegistry registry = IIORegistry.getDefaultInstance(); registry.registerServiceProvider( new com.realityinteractive.imageio.tga.TGAImageReaderSpi());
IIORegistry.getDefaultInstance().registerServiceProvider(new URLImageInputStreamSpi()); ImageIO.setUseCache(false);
/** * */ private static void registerAllServicesProviders() { IIORegistry.getDefaultInstance().registerServiceProvider(new TIFFImageWriterSpi()); }
if (!IIORegistry.lookupProviders(Class.forName(JavaImageEditor.TIFF_READER_CLASS)).hasNext()) { IIORegistry.getDefaultInstance().registerServiceProvider(Class.forName(JavaImageEditor.TIFF_READER_CLASS).newInstance());
/** * Get the TwelveMonkeys reader if its present and attempt to load it if * necessary. * * @return the TwelveMonkeys JPEG Reader or null if it can't be loaded. */ private static ImageReader getMonkeyReader() { Iterator<ImageReader> iter = ImageIO.getImageReadersByFormatName("jpeg"); while (iter.hasNext()) { final ImageReader reader = iter.next(); if (reader instanceof com.twelvemonkeys.imageio.plugins.jpeg.JPEGImageReader) return reader; } IIORegistry.getDefaultInstance().registerServiceProvider( new com.twelvemonkeys.imageio.plugins.jpeg.JPEGImageReaderSpi()); iter = ImageIO.getImageReadersByFormatName("jpeg"); while (iter.hasNext()) { final ImageReader reader = iter.next(); if (reader instanceof com.twelvemonkeys.imageio.plugins.jpeg.JPEGImageReader) return reader; } return null; } }
/** * Get the TwelveMonkeys reader if its present and attempt to load it if * necessary. * * @return the TwelveMonkeys JPEG Reader or null if it can't be loaded. */ private static ImageReader getMonkeyReader() { Iterator<ImageReader> iter = ImageIO.getImageReadersByFormatName("jpeg"); while (iter.hasNext()) { final ImageReader reader = iter.next(); if (reader instanceof com.twelvemonkeys.imageio.plugins.jpeg.JPEGImageReader) return reader; } IIORegistry.getDefaultInstance().registerServiceProvider( new com.twelvemonkeys.imageio.plugins.jpeg.JPEGImageReaderSpi()); iter = ImageIO.getImageReadersByFormatName("jpeg"); while (iter.hasNext()) { final ImageReader reader = iter.next(); if (reader instanceof com.twelvemonkeys.imageio.plugins.jpeg.JPEGImageReader) return reader; } return null; } }
private void registerSpi() { // We will register a new Spi for creating NIO-based ImageInputStreams. final IIORegistry defaultInstance = IIORegistry.getDefaultInstance(); Iterator<ImageInputStreamSpi> serviceProviders = defaultInstance.getServiceProviders(ImageInputStreamSpi.class, true); ImageInputStreamSpi toUnorder = null; if (defaultInstance.getServiceProviderByClass(FileImageInputStreamSpi.class) == null) { // register only if not already registered while (serviceProviders.hasNext()) { ImageInputStreamSpi current = serviceProviders.next(); if (current.getInputClass() == File.class) { toUnorder = current; break; } } channelImageInputStreamSpi = new FileImageInputStreamSpi(); defaultInstance.registerServiceProvider(channelImageInputStreamSpi); if (toUnorder != null) { // Make the custom Spi to be the first one to be used. defaultInstance.setOrdering(ImageInputStreamSpi.class, channelImageInputStreamSpi, toUnorder); } } }
private void registerSpi() { // We will register a new Spi for creating NIO-based ImageInputStreams. final IIORegistry defaultInstance = IIORegistry.getDefaultInstance(); Iterator<ImageInputStreamSpi> serviceProviders = defaultInstance.getServiceProviders(ImageInputStreamSpi.class, true); ImageInputStreamSpi toUnorder = null; if (defaultInstance.getServiceProviderByClass(FileImageInputStreamSpi.class) == null) { // register only if not already registered while (serviceProviders.hasNext()) { ImageInputStreamSpi current = serviceProviders.next(); if (current.getInputClass() == File.class) { toUnorder = current; break; } } channelImageInputStreamSpi = new FileImageInputStreamSpi(); defaultInstance.registerServiceProvider(channelImageInputStreamSpi); if (toUnorder != null) { // Make the custom Spi to be the first one to be used. defaultInstance.setOrdering(ImageInputStreamSpi.class, channelImageInputStreamSpi, toUnorder); } } } }
/** * Registers a file image input strwM SPI for image input stream, if none is yet registered. */ protected void registerSpi() { final IIORegistry defaultInstance = IIORegistry.getDefaultInstance(); Iterator<ImageInputStreamSpi> serviceProviders = defaultInstance.getServiceProviders(ImageInputStreamSpi.class, true); ImageInputStreamSpi toUnorder = null; if (defaultInstance.getServiceProviderByClass(FileImageInputStreamSpi.class) == null) { // register only if not already registered while (serviceProviders.hasNext()) { ImageInputStreamSpi current = serviceProviders.next(); if (current.getInputClass() == File.class) { toUnorder = current; break; } } imageInputStreamSpi = new FileImageInputStreamSpi(); defaultInstance.registerServiceProvider(imageInputStreamSpi); if (toUnorder != null) { // Make the custom Spi to be the first one to be used. defaultInstance.setOrdering(ImageInputStreamSpi.class, imageInputStreamSpi, toUnorder); } } }
@Test public void testDestroyConcurrentModRegression() { ServletContext context = mock(ServletContext.class); ServletContextEvent destroyed = mock(ServletContextEvent.class); when(destroyed.getServletContext()).thenReturn(context); ServletContextListener listener = new IIOProviderContextListener(); listener.contextInitialized(mock(ServletContextEvent.class)); ImageReaderSpi provider1 = new MockImageReaderSpiOne(); ImageReaderSpi provider2 = new MockImageReaderSpiToo(); // NOTE: Fake registering for simplicity, but it still exposes the original problem with de-registering IIORegistry registry = IIORegistry.getDefaultInstance(); registry.registerServiceProvider(provider1); registry.registerServiceProvider(provider2); assertTrue(registry.contains(provider1)); assertTrue(registry.contains(provider2)); listener.contextDestroyed(destroyed); assertFalse(registry.contains(provider1)); assertFalse(registry.contains(provider2)); }
IIORegistry.getDefaultInstance().registerServiceProvider(new URLImageInputStreamSpi()); ImageIO.setUseCache(false);