--- android/TrainInfoService/src/dk/thoerup/traininfoservice/banedk/TimetableServlet.java 2010/06/16 08:11:33 858 +++ android/TrainInfoService/src/dk/thoerup/traininfoservice/banedk/TimetableServlet.java 2010/11/12 18:33:38 1190 @@ -1,21 +1,28 @@ package dk.thoerup.traininfoservice.banedk; import java.io.IOException; -import java.util.List; +import java.io.StringWriter; + import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.simpleframework.xml.Serializer; +import org.simpleframework.xml.core.Persister; + +import dk.thoerup.android.traininfo.common.TimetableBean; import dk.thoerup.circuitbreaker.CircuitBreakerException; import dk.thoerup.traininfoservice.Statistics; /** * Servlet implementation class TimetableServlet */ +@WebServlet(urlPatterns={"/TimetableServlet"}) public class TimetableServlet extends HttpServlet { private static final long serialVersionUID = 1L; @@ -24,14 +31,16 @@ TimetableFetcher fetcher; + @Override public void init() throws ServletException { super.init(); - boolean useTempSite = Boolean.parseBoolean( getServletContext().getInitParameter("usetempsite") ); + boolean useAzureSite = Boolean.parseBoolean( getServletContext().getInitParameter("useazuresite") ); int cacheTimeout = Integer.parseInt( getServletContext().getInitParameter("cache_timeout") ); - logger.info( "TimetableServlet, use temp site=" + useTempSite + ", cache=" + cacheTimeout); - fetcher = new TimetableFetcher(useTempSite,cacheTimeout); + int replyTimeout = Integer.parseInt( getServletContext().getInitParameter("reply_timeout") ); + logger.info( "TimetableServlet, use azure site=" + useAzureSite + ", cache=" + cacheTimeout); + fetcher = new TimetableFetcher(useAzureSite,cacheTimeout,replyTimeout); } @Override @@ -51,7 +60,7 @@ try { - List timetable = fetcher.cachedLookupTimetable(train, type); + TimetableBean timetable = fetcher.cachedLookupTimetable(train, type); String responseXML = formatTimetable(timetable); @@ -62,7 +71,7 @@ Statistics.getInstance().incrementTimetableErrors(); response.sendError(500, "Backend timed out"); } catch (CircuitBreakerException cbe) { - logger.warning("Circuitbreaker - failing fast"); + logger.warning("Circuitbreaker - failing fast, type=" + type + ", train="+train); Statistics.getInstance().incrementTimetableErrors(); response.sendError(500); }catch (Exception e) { @@ -73,29 +82,18 @@ } - String formatTimetable(List timetable) { - StringBuffer sb = new StringBuffer(); - sb.append("\n"); - - sb.append(""); - - for (TimetableBean bean : timetable) { - sb.append(""); - - sb.append("").append( bean.getStation() ).append(""); - sb.append("").append( bean.getArrival() ).append(""); - sb.append("").append( bean.getDeparture() ).append(""); - sb.append("").append( bean.getStationId() ).append(""); - - sb.append(""); + String formatTimetable(TimetableBean timetable) throws ServletException { + Serializer serializer = new Persister(); + + StringWriter out = new StringWriter(); + + try { + serializer.write(timetable, out); + } catch (Exception e) { + throw new ServletException(e); } - sb.append(""); - - return sb.toString(); + return out.toString(); } }