[Geoserver-devel] [jira] Created: (GEOS-1585) Legend production fails if there is a raster symbolizer in the mix

Legend production fails if there is a raster symbolizer in the mix
------------------------------------------------------------------

                 Key: GEOS-1585
                 URL: http://jira.codehaus.org/browse/GEOS-1585
             Project: GeoServer
          Issue Type: Bug
    Affects Versions: 1.6.0-RC1
            Reporter: Andrea Aime
            Assignee: Andrea Aime
             Fix For: 1.6.0-RC2

The stack trace is:

{code}
org.vfny.geoserver.wms.WmsException: Can't get input stream from URL!
   at org.vfny.geoserver.wms.responses.DefaultRasterLegendProducer.produceLegendGraphic(DefaultRasterLegendProducer.java:232)
   at org.vfny.geoserver.wms.responses.GetLegendGraphicResponse.execute(GetLegendGraphicResponse.java:80)
   at org.vfny.geoserver.servlets.AbstractService.doService(AbstractService.java:516)
   at org.vfny.geoserver.servlets.AbstractService.doGet(AbstractService.java:315)
   at org.geoserver.request.Dispatcher.dispatch(Dispatcher.java:192)
   at org.geoserver.request.Dispatcher.handleRequestInternal(Dispatcher.java:52)
   at org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:139)
   at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:44)
   at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:684)
   at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:625)
   at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:392)
   at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:347)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
   at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:445)
   at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1050)
   at org.vfny.geoserver.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:103)
   at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1041)
   at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:354)
   at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:226)
   at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:627)
   at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:149)
   at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:123)
   at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:141)
   at org.mortbay.jetty.Server.handle(Server.java:269)
   at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:430)
   at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:687)
   at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:492)
   at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:199)
   at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:339)
   at org.mortbay.jetty.nio.HttpChannelEndPoint.run(HttpChannelEndPoint.java:270)
   at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:475)
Caused by: javax.imageio.IIOException: Can't get input stream from URL!
   at javax.imageio.ImageIO.read(ImageIO.java:1369)
   at org.vfny.geoserver.wms.responses.DefaultRasterLegendProducer.produceLegendGraphic(DefaultRasterLegendProducer.java:224)
   ... 31 more
Caused by: java.io.FileNotFoundException: http://192.168.0.10:1977/geoserver/wms/../data/images/rasterLegend.png
   at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1239)
   at java.net.URL.openStream(URL.java:1009)
   at javax.imageio.ImageIO.read(ImageIO.java:1367)
   ... 32 more
{code}

and the actual code reads like:

{code}
              if (symbolizer instanceof RasterSymbolizer) {
                    BufferedImage imgShape;

                    try {
                        imgShape = ImageIO.read(new URL(request.getHttpServletRequest()
                                                               .getRequestURL()
                                    + "/../data/images/rasterLegend.png"));
                    } catch (MalformedURLException e) {
                        LOGGER.log(Level.SEVERE, e.getLocalizedMessage(), e);
                        throw new WmsException(e);
                    } catch (IOException e) {
                        LOGGER.log(Level.SEVERE, e.getLocalizedMessage(), e);
                        throw new WmsException(e);
                    }

                    graphics.drawImage(imgShape, 0, 0, w, h, null);
                }
{code}

Hum, I took the time machine and went back some releases trying to hunt down for that {{/../data/images/rasterLegend.png}} and found
it only in the oldest cite testing data directories.... Hmmm... ok, we're going to put it back, but not in the data dir
(the only folders being web served out of the data dir are styles and www, but we should not rely on somethign that can manipulated
by the user to lookup). Better include this as a classpath resource.

--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira