--- android/TrainInfoService/src/dk/thoerup/traininfoservice/banedk/DepartureServlet.java 2010/09/16 17:48:17 1074 +++ android/TrainInfoService/src/dk/thoerup/traininfoservice/banedk/DepartureServlet.java 2010/09/16 19:14:47 1075 @@ -1,6 +1,8 @@ package dk.thoerup.traininfoservice.banedk; +import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.File; import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; @@ -10,8 +12,12 @@ import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.xml.parsers.DocumentBuilderFactory; + +import javax.xml.transform.Source; +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; @@ -30,8 +36,10 @@ Logger logger = Logger.getLogger( DepartureServlet.class.getName() ); DepartureFetcher fetcher; - TransformerFactory transformerFactory = TransformerFactory.newInstance(); - DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance(); + + + + String xslPath; @Override @@ -43,6 +51,8 @@ int replyTimeout = Integer.parseInt( getServletContext().getInitParameter("reply_timeout") ); logger.info( "DepartureServlet, use azure site=" + useAzureSite + ", cache=" + cacheTimeout); fetcher = new DepartureFetcher(useAzureSite, cacheTimeout, replyTimeout); + + xslPath = getServletContext().getRealPath("/departures.xsl"); } @Override @@ -91,14 +101,16 @@ resp.setContentType("text/xml"); resp.getWriter().print( formatXml(beans) ); } else if (format.equalsIgnoreCase("html")) { - + /* String advStr = req.getParameter("advanced"); boolean advanced = advStr != null ? Boolean.parseBoolean(advStr) : false; req.setAttribute("advanced", advanced); req.setAttribute("departurebeans", beans); req.setAttribute("stationID", station ); - getServletContext().getRequestDispatcher("/ViewDepartures.jsp").forward(req,resp); + getServletContext().getRequestDispatcher("/ViewDepartures.jsp").forward(req,resp);*/ + resp.setContentType("text/html"); + resp.getWriter().print( xmlToHtml(formatXml(beans)) ); } else { resp.sendError(400, "Unknown format"); } @@ -119,5 +131,25 @@ return out.toString(); } + + protected String xmlToHtml(String input) { + + try { + Source stylesheet = new StreamSource( new File(xslPath) ); + + + TransformerFactory transFact = TransformerFactory.newInstance(); + + Transformer trans = transFact.newTransformer(stylesheet); + + Source xml = new StreamSource( new ByteArrayInputStream(input.getBytes() )); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + trans.transform(xml, new StreamResult(out)); + + return out.toString(); + } catch (Exception e) { + return e.toString(); + } + } }