Mercurial > dive4elements > river
view flys-client/src/main/java/de/intevation/flys/client/server/SQKMChartServiceImpl.java @ 4128:11c589d68f13
Fix for NPE in FLYSWorkspace.bringUp() #933
author | Christian Lins <christian.lins@intevation.de> |
---|---|
date | Sun, 14 Oct 2012 10:15:50 +0200 |
parents | 75e9eab05ee4 |
children |
line wrap: on
line source
package de.intevation.flys.client.server; import org.apache.log4j.Logger; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.artifacts.httpclient.exceptions.ConnectionException; import de.intevation.artifacts.httpclient.http.HttpClient; import de.intevation.artifacts.httpclient.http.HttpClientImpl; import de.intevation.artifacts.httpclient.http.response.StreamResponseHandler; public class SQKMChartServiceImpl extends HttpServlet { private static final Logger log = Logger.getLogger(FixingsKMChartServiceImpl.class); public static final String SERVICE_NAME = "sq-km-chart"; public SQKMChartServiceImpl() { } public void doGet(HttpServletRequest req, HttpServletResponse resp) { log.info("SQKMChartServiceImpl.doGet"); String url = getServletContext().getInitParameter("server-url"); String locale = req.getParameter("locale"); String filter = req.getParameter("filter"); if (filter == null || filter.length() == 0) { log.warn("Missing 'filter' parameter."); return; } if (locale == null || locale.length() == 0) { locale = "de"; } Document filterDoc = XMLUtils.jsonToXML(filter); if (filterDoc == null) { log.warn("Creating filter document failed."); return; } InputStream in; try { HttpClient client = new HttpClientImpl(url, locale); in = (InputStream)client.callService( url, // XXX: Why? The URL is passed by construction already. SERVICE_NAME, filterDoc, new StreamResponseHandler()); } catch (ConnectionException ce) { log.error(ce); return; } resp.setHeader("Content-Type", guessMIMEType(filterDoc)); try { OutputStream out = resp.getOutputStream(); byte [] buf = new byte[4096]; int i = -1; while ((i = in.read(buf)) >= 0) { out.write(buf, 0, i); } out.flush(); } catch (IOException ioe) { log.error(ioe); } finally { try { in.close(); } catch (IOException ioe) { /* ignored */ } } } protected static String guessMIMEType(Document document) { NodeList formats = document.getElementsByTagName("format"); String format = "png"; if (formats.getLength() > 0) { String type = ((Element)formats.item(0)).getAttribute("type"); if (type.length() > 0) { format = type; } } return "image/" + format; } }