Problem creating an image from a remote url

I am creating a servlet which does the following:

1. retrieves an image from a remote url

2. resizes the image

3. sends the image to the client.

The servlet works fine when I run it on my PC, but when I run it on the server, it doesn't. Here's the problematic code

private Image getRemoteImage(String imageUrl)throws Exception{

System.err.println("in getRemoteImage()");

if (!imageUrl.startsWith("http://")) imageUrl ="http://" + imageUrl;

URL u =new URL(imageUrl);

System.err.println("imageUrl: " + imageUrl);

HttpURLConnection huc = (HttpURLConnection) u.openConnection();

huc.setRequestMethod("GET");

System.err.println("connecting...");

huc.connect();

System.err.println("Getting DataInputStream...");

DataInputStream in =new DataInputStream(u.openStream());

//DataInputStream in = new DataInputStream(huc.getInputStream());

System.err.println("...got");

int numBytes = huc.getContentLength();//1063

System.err.println("numBytes: " + numBytes);

byte[] imageBytes =newbyte[numBytes];

System.err.println("reading fully...");

in.readFully(imageBytes);

System.err.println("...read");

in.close();

System.err.println("creating imageIcon");

ImageIcon imageIcon =new ImageIcon(imageBytes);//<-- problem here

System.err.println("** THIS LINE IS NOT REACHED **");

System.err.println("creating image");

Image image = imageIcon.getImage();

System.err.println("returning image");

return image;

}

When I access the servlet with FF, the browser reports:

The image ?lt;my servlet url>?cannot be displayed, because it contains errors.

When I access the servlet with IE, I get:

Apache Tomcat/4.0.3 - HTTP Status 500 - Internal Server Error

--

type Exception report

message Internal Server Error

description The server encountered an internal error (Internal Server Error) that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet execution threw an exception

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)

at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2343)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)

at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)

at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)

at org.apache.ajp.tomcat4.Ajp13Processor.process(Ajp13Processor.java:429)

at org.apache.ajp.tomcat4.Ajp13Processor.run(Ajp13Processor.java:495)

at java.lang.Thread.run(Thread.java:534)

root cause

java.lang.NoClassDefFoundError

at java.lang.Class.forName0(Native Method)

at java.lang.Class.forName(Class.java:141)

at java.awt.Toolkit$2.run(Toolkit.java:748)

at java.security.AccessController.doPrivileged(Native Method)

at java.awt.Toolkit.getDefaultToolkit(Toolkit.java:739)

at javax.swing.ImageIcon.(ImageIcon.java:205)

at myservlets.GetImage.getRemoteImage(GetImage.java:283)

at myservlets.GetImage.processRequest(GetImage.java:73)

at myservlets.GetImage.doGet(GetImage.java:394)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)

at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2343)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)

at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)

at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)

at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)

at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)

at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)

at org.apache.ajp.tomcat4.Ajp13Processor.process(Ajp13Processor.java:429)

at org.apache.ajp.tomcat4.Ajp13Processor.run(Ajp13Processor.java:495)

at java.lang.Thread.run(Thread.java:534)

Any ideas?

Cheers,

James

[8595 byte] By [jhodgskia] at [2007-11-27 8:35:54]
# 1
How about this:Toolkit.getDefaultToolkit().getImage(location);(where location is a URL)?
rebola at 2007-7-12 20:32:37 > top of Java-index,Desktop,Core GUI APIs...
# 2
Cheers rebol.I've tried that (along with all other kinds of techniques I never knew existed). I think it might be a problem with the Tomcat setup - it may need to run headless (sounds a bit severe!...).
jhodgskia at 2007-7-12 20:32:37 > top of Java-index,Desktop,Core GUI APIs...