--- android/TrainInfoServiceGoogle/src/dk/thoerup/traininfoservice/banedk/DepartureServlet.java 2010/09/21 15:46:02 1091 +++ android/TrainInfoServiceGoogle/src/dk/thoerup/traininfoservice/banedk/DepartureServlet.java 2010/09/21 16:45:24 1092 @@ -4,6 +4,7 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; +import java.io.StringWriter; import java.util.logging.Level; import java.util.logging.Logger; @@ -11,14 +12,13 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; - import javax.xml.transform.Source; +import javax.xml.transform.Templates; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; -import org.simpleframework.xml.Serializer; import org.simpleframework.xml.core.Persister; import dk.thoerup.android.traininfo.common.DepartureBean; @@ -38,8 +38,10 @@ - String xslPath; + + TransformerFactory xslTransFact; + Templates xslTemplate; @Override public void init() throws ServletException { @@ -51,7 +53,18 @@ logger.info( "DepartureServlet, use azure site=" + useAzureSite + ", cache=" + cacheTimeout); fetcher = new DepartureFetcher(useAzureSite, cacheTimeout, replyTimeout); - xslPath = getServletContext().getRealPath("/departures.xsl"); + + + xslTransFact = TransformerFactory.newInstance(); + + String xslPath = getServletContext().getRealPath("/departures.xsl"); + Source stylesheet = new StreamSource( new File(xslPath) ); + + try { + xslTemplate = xslTransFact.newTemplates(stylesheet); + } catch (Exception e) { + throw new ServletException(e); + } } @Override @@ -97,8 +110,10 @@ resp.setHeader("Cache-Control", "no-cache, must-revalidate"); if (format.equalsIgnoreCase("xml")) { - resp.setContentType("text/xml"); + resp.setContentType("text/xml; charset=utf-8"); resp.getWriter().print( formatXml(beans) ); + + } else if (format.equalsIgnoreCase("html")) { /* String advStr = req.getParameter("advanced"); @@ -118,11 +133,12 @@ protected String formatXml(DepartureBean beans) throws ServletException{ - Serializer serializer = new Persister(); - - ByteArrayOutputStream out = new ByteArrayOutputStream(); + Persister serializer = new Persister(); - try { + + StringWriter out = new StringWriter(); + + try { serializer.write(beans, out); } catch (Exception e) { throw new ServletException(e); @@ -131,15 +147,10 @@ return out.toString(); } - protected String xmlToHtml(String input) { + protected String xmlToHtml(String input) throws ServletException { - try { - Source stylesheet = new StreamSource( new File(xslPath) ); - - - TransformerFactory transFact = TransformerFactory.newInstance(); - - Transformer trans = transFact.newTransformer(stylesheet); + try { + Transformer trans = xslTemplate.newTransformer(); Source xml = new StreamSource( new ByteArrayInputStream(input.getBytes() )); ByteArrayOutputStream out = new ByteArrayOutputStream(); @@ -147,7 +158,7 @@ return out.toString(); } catch (Exception e) { - return e.toString(); + throw new ServletException(e); } }