I want to build a DynamicImageResource which can scale internal (packaged) images (with name : {index}.gif ) . In getImageData() , I try to load a truly existing image , but cannot getResource() , it returns null !
Here is my code : public class ScaledImageResource extends DynamicImageResource { private ThreadLocal<Integer> index = new ThreadLocal<Integer>(); private ThreadLocal<Integer> width = new ThreadLocal<Integer>(); private ThreadLocal<Integer> height = new ThreadLocal<Integer>(); @Override public IResourceStream getResourceStream() { ValueMap map = getParameters(); index .set(map.getAsInteger("index" , 1)); width .set(map.getAsInteger("width" , 50)); height.set(map.getAsInteger("height", 50)); return super.getResourceStream(); } @Override protected byte[] getImageData() { ResourceReference imageResource = new ResourceReference(MyPage.class , "icons/byIndex/"+index.get()+".gif"); http://foobar.com/app/resources/foo.bar.MyPage/icons/byIndex/1.gif does exist ! try { System.out.println("imageResource.getResource() = " + imageResource.getResource()); // returns NULL InputStream is = imageResource.getResource().getResourceStream().getInputStream(); BufferedImage bufferedImage = ImageIO.read(is); BufferedImage scaledImage = BufferedImageTools.getImage(bufferedImage, width.get() , height.get()); byte[] bytes = null; //scale image , build bytes , skipped here. return bytes; } catch (Exception e) { } return null; } } And in Application's init(): getSharedResources().add(IMG_KEY, new ScaledImageResource()); mountSharedResource("/scaledImage", new ResourceReference(IMG_KEY).getSharedResourceKey()); Note , the image file does exist there , and http://foobar.com/app/resources/foo.bar.MyPage/icons/byIndex/1.gif does browsable ! But why cannot I getResource() of the imageResource ?