you can always create a very simple ServletImage component that
generates the url based on the servlet mapping. imho you should always
go for the simplest solution first, and that is a simple servlet.
shared resources are great when you need to resources for reusable
components, i assume this is in your application so no need for
reusability and having to add something to web.xml isnt a problem...

-igor

On Wed, Jun 25, 2008 at 8:32 AM, V. Jenks <[EMAIL PROTECTED]> wrote:
>
> Thanks Igor, I'll look into this - not something I've tried yet.  I was
> hoping there'd be a short-term tweak to what I already have in place because
> there are references to that imageResource lookup URL in several spots in my
> code that I'd now have to go and swap out.
>
>
> igor.vaynberg wrote:
>>
>> why not just create a dead simple servlet that streams images? in fact
>> there are tons of them online you can just take. it is a much simpler
>> solution then dealing with wicket's resources for this particular
>> usecase.
>>
>> -igor
>>
>> On Wed, Jun 25, 2008 at 7:59 AM, V. Jenks <[EMAIL PROTECTED]> wrote:
>>>
>>> I'm having non-stop issues w/ DynamicWebResource and trying to load
>>> images
>>> external to my .ear deployment now that I've moved to 1.3.  First off,
>>> I'm
>>> hoping someone can suggest an easier way to do it because what I have now
>>> is
>>> code that someone was nice enough to give me, here on the Wicket mailing
>>> list.  However, I don't entirely understand how it works and while it
>>> worked
>>> for 2 years in Wicket 1.2, it is now causing me problem after problem in
>>> Wicket 1.3.x - for whatever reason.
>>>
>>> First what I've got is a class called ImageResource which extends
>>> DynamicWebResource:
>>>
>>> /*****************************************************/
>>> public class ImageResource extends DynamicWebResource
>>> {
>>>        private ImageService imgSrv;
>>>
>>>        public ImageResource()
>>>        {
>>>                super();
>>>                imgSrv = new ImageServiceEngine();
>>>        }
>>>
>>>        public String getImage(String image)
>>>        {
>>>                String retImg = null;
>>>
>>>                try
>>>                {
>>>                        retImg = imgSrv.getImage(image).toString();
>>>                }
>>>                catch (IOException exp)
>>>                {
>>>                        LogProxy.saveEntry(exp);
>>>                }
>>>
>>>                return retImg;
>>>        }
>>>
>>>        protected ResourceState getResourceState()
>>>        {
>>>                ImageResourceState state = null;
>>>
>>>                try
>>>                {
>>>                        ValueMap params = getParameters();
>>>
>>>                        byte[] data = null;
>>>                        String imageId = params.getString("file");
>>>
>>>                        //Date lastModified = getImageLastMod(imageId);
>>>                        state = new ImageResourceState(Time.valueOf(new
>>> Date()));
>>>                        state.setContentType("image/jpeg");
>>>
>>>                        //SECURITY PRECAUTION - DO NOT ALLOW ANYTHING BUT
>>> IMAGES!
>>>                        if
>>> (imageId.contains(PropertyProxy.getExternalImagesRoot()) ||
>>>
>>> imageId.contains(PropertyProxy.getExternalImagesAltRoot()))
>>>                        {
>>>                                data = imgSrv.getImage(imageId);
>>>                        }
>>>                        else
>>>                        {
>>>                                //change image to "not found" warning
>>> image
>>>                                data =
>>> imgSrv.getImage(PropertyProxy.getImageNotFound());
>>>
>>>                                //TODO: send email to notify of
>>> inappropriate access
>>>                        }
>>>
>>>                        state.setData(data);
>>>                }
>>>                catch (FileNotFoundException exp)
>>>                {
>>>                        LogProxy.saveEntry(exp);
>>>                }
>>>                catch (IOException exp)
>>>                {
>>>                        LogProxy.saveEntry(exp);
>>>                }
>>>                catch (NullPointerException exp)
>>>                {
>>>                        LogProxy.saveEntry(exp);
>>>                }
>>>
>>>                return state;
>>>        }
>>>
>>>        /**
>>>         *
>>>         * @author vjenks
>>>         *
>>>         */
>>>        protected class ImageResourceState extends ResourceState
>>>        {
>>>                private String contentType;
>>>                private byte[] data;
>>>                private Time lastModified;
>>>
>>>                ImageResourceState(Time lastModified)
>>>                {
>>>                        super();
>>>                        this.lastModified = lastModified;
>>>                }
>>>
>>>                public String getContentType()
>>>                {
>>>                        return contentType;
>>>                }
>>>
>>>                void setContentType(String contentType)
>>>                {
>>>                        this.contentType = contentType;
>>>                }
>>>
>>>                public byte[] getData()
>>>                {
>>>                        return data;
>>>                }
>>>
>>>                void setData(byte[] data)
>>>                {
>>>                        this.data = data;
>>>                }
>>>
>>>                public int getLength()
>>>                {
>>>                        if (data != null)
>>>                                return data.length;
>>>                        else
>>>                                return 0;
>>>                }
>>>
>>>                public Time lastModifiedTime()
>>>                {
>>>                        return lastModified;
>>>                }
>>>        }
>>> }
>>> /*****************************************************/
>>>
>>>
>>> You can see that it uses a class called ImageServiceEngine:
>>>
>>> /*****************************************************/
>>> public class ImageServiceEngine implements ImageService, Serializable
>>> {
>>>        private int thumbnailSize;
>>>
>>>        public ImageServiceEngine()
>>>        {
>>>                super();
>>>        }
>>>
>>>        public int getThumbnailSize()
>>>        {
>>>                return this.thumbnailSize;
>>>        }
>>>
>>>        public void setThumbnailSize(int size)
>>>        {
>>>                this.thumbnailSize = size;
>>>        }
>>>
>>>        public byte[] getImage(String image) throws IOException
>>>        {
>>>                        // Open the file, then read it in.
>>>                        ByteArrayOutputStream outStream = new
>>> ByteArrayOutputStream();
>>>                        InputStream inStream = new FileInputStream(new
>>> File(image));
>>>                        copy(inStream, outStream);
>>>                        inStream.close();
>>>                        outStream.close();
>>>                        return outStream.toByteArray();
>>>        }
>>>
>>>        public Date getLastModifyTime(String image)
>>>        {
>>>                File f = new File(image);
>>>                return new Date(f.lastModified());
>>>        }
>>>
>>>        /* Spring Injected */
>>>        private File imageDir;
>>>
>>>        public void setImageDir(String dirName)
>>>        {
>>>                imageDir = new File(dirName);
>>>        }
>>>
>>>        public byte[] getThumbnail(String image) throws IOException
>>>        {
>>>                        // Open the file, then read it in.
>>>                        ByteArrayOutputStream outStream = new
>>> ByteArrayOutputStream();
>>>                        InputStream inStream = new FileInputStream(new
>>> File(image));
>>>                        copy(inStream, outStream);
>>>                        inStream.close();
>>>                        outStream.close();
>>>                        return outStream.toByteArray();
>>>        }
>>>
>>>        /**
>>>         * Copies data from src into dst.
>>>         */
>>>        private void copy(InputStream source, OutputStream destination)
>>>                        throws IOException
>>>        {
>>>                try
>>>                {
>>>                        // Transfer bytes from source to destination
>>>                        byte[] buf = new byte[1024];
>>>                        int len;
>>>                        while ((len = source.read(buf)) > 0)
>>>                        {
>>>                                destination.write(buf, 0, len);
>>>                        }
>>>                        source.close();
>>>                        destination.close();
>>>                }
>>>                catch (IOException ioe)
>>>                {
>>>                        throw ioe;
>>>                }
>>>        }
>>>
>>>        private File createImageFile(String image)
>>>        {
>>>                File file = new File(imageDir, image);
>>>                return file;
>>>        }
>>>
>>>
>>>        /** @see ImageService#save(ImageEntry) */
>>>        public void save(String image, InputStream imageStream)
>>>                        throws IOException
>>>        {
>>>                // Read in the image data.
>>>                ByteArrayOutputStream baos = new ByteArrayOutputStream();
>>>                copy(imageStream, baos);
>>>                baos.close();
>>>                byte[] imageData = baos.toByteArray();
>>>                baos = null;
>>>
>>>                // Create a unique name for the file in the image
>>> directory and
>>>                // write the image data into it.
>>>                File newFile = createImageFile(image);
>>>                OutputStream outStream = new FileOutputStream(newFile);
>>>                outStream.write(imageData);
>>>                outStream.close();
>>>        }
>>> }
>>> /*****************************************************/
>>>
>>>
>>> ImageResource is setup in init() in the App class like so:
>>>
>>> /*****************************************************/
>>>  public void init()
>>>  {
>>>    //create external images resource
>>>    getSharedResources().add("imageResource", new ImageResource());
>>>  }
>>> /*****************************************************/
>>>
>>> Now, if there's a nicer, cleaner, more simple way of loading external
>>> images, I'd really appreciate some suggestions.
>>>
>>> As for what is now broken, it seems to have something to do w/ the fact
>>> that
>>> the Wicket Filter is looking at "/*" to find the application because if I
>>> use this URL to view an image via my "imageResource" like so:
>>>
>>> http://localhost/MyApp/resources/wicket.Application/imageResource?file=C:\\Images\\assets\\images\\newsletter\\test_bkg.jpg
>>>
>>> ...I get a 404 not found.  This worked fine when my URL had an alias in
>>> Wicket 1.2, i.e. "/products" instead of the "/*" that is used now.  If I
>>> use
>>> "/products" in the URL above, as I would have prior to 1.3 (since I have
>>> it
>>> listed as a mountable URL in the app class) - it throws an exception
>>> saying
>>> "java.lang.IllegalStateException: URL fragment has unmatched key/value
>>> pair:
>>> resources/wicket.Application/imageResource"
>>>
>>> So, I need help in both areas....one, making this easier, if possible.
>>> And,
>>> most importantly - being able to restore production and be able to view
>>> external images ASAP.
>>>
>>> Thanks very much in advance!
>>> --
>>> View this message in context:
>>> http://www.nabble.com/More-issues-w--external-images-and-DynamicWebResource-tp18114584p18114584.html
>>> Sent from the Wicket - User mailing list archive at Nabble.com.
>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>>> For additional commands, e-mail: [EMAIL PROTECTED]
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: [EMAIL PROTECTED]
>> For additional commands, e-mail: [EMAIL PROTECTED]
>>
>>
>>
>
> --
> View this message in context: 
> http://www.nabble.com/More-issues-w--external-images-and-DynamicWebResource-tp18114584p18115306.html
> Sent from the Wicket - User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to