/[projects]/android/TrainInfoService/src/dk/thoerup/traininfoservice/banedk/MetroServlet.java
ViewVC logotype

Annotation of /android/TrainInfoService/src/dk/thoerup/traininfoservice/banedk/MetroServlet.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1401 - (hide annotations) (download)
Thu Apr 28 19:03:04 2011 UTC (13 years, 1 month ago) by torben
File size: 2472 byte(s)
Either all metro lookups should be included in statistics or none of them shall - and for now it's none of them
1 torben 1041 package dk.thoerup.traininfoservice.banedk;
2    
3 torben 1190
4 torben 1041 import java.io.IOException;
5 torben 1190 import java.io.StringWriter;
6 torben 1042 import java.util.logging.Level;
7 torben 1041 import java.util.logging.Logger;
8    
9     import javax.servlet.ServletException;
10     import javax.servlet.annotation.WebServlet;
11     import javax.servlet.http.HttpServlet;
12     import javax.servlet.http.HttpServletRequest;
13     import javax.servlet.http.HttpServletResponse;
14    
15 torben 1060 import org.simpleframework.xml.Serializer;
16     import org.simpleframework.xml.core.Persister;
17    
18 torben 1061 import dk.thoerup.android.traininfo.common.MetroBean;
19 torben 1042 import dk.thoerup.circuitbreaker.CircuitBreakerException;
20 torben 1041
21    
22 torben 1042
23 torben 1060
24 torben 1401
25 torben 1041 @WebServlet(urlPatterns={"/MetroServlet"})
26     public class MetroServlet extends HttpServlet {
27 torben 1042
28     private static final long serialVersionUID = 1L;
29    
30     Logger logger = Logger.getLogger(MetroServlet.class.getName());
31 torben 1041
32 torben 1042 MetroFetcher fetcher = new MetroFetcher();
33 torben 1041
34 torben 1042 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
35 torben 1041
36 torben 1042 if (req.getParameter("station") == null) {
37     resp.sendError(400, "not enough parameters");
38     return;
39     }
40 torben 1041
41 torben 1042 //TODO: How should statistics be handled for the metro
42     //Statistics.getInstance().incrementDepartureLookups();
43 torben 1041
44 torben 1042 int station = Integer.parseInt( req.getParameter("station") );
45 torben 1041
46    
47 torben 1042 MetroBean bean;
48 torben 1041
49 torben 1042 try {
50 torben 1041
51 torben 1042 bean = fetcher.cachedLookupMetroDepartures(station);
52     String xml = formatXml(bean);
53 torben 1041
54 torben 1042 resp.setDateHeader("Expires", 0);
55     resp.setHeader("Cache-Control", "no-cache, must-revalidate");
56 torben 1060 resp.setContentType("text/xml");
57 torben 1042 resp.getWriter().print(xml);
58 torben 1041
59 torben 1042 } catch (java.io.IOException ioe) {
60     logger.warning("Metro read failed, station="+station + ". " + ioe.getMessage() );
61     //Statistics.getInstance().incrementDepartureErrors();
62     resp.sendError(500);
63     return;
64     } catch (CircuitBreakerException cbe) {
65     logger.warning("Circuitbreaker - failing fast");
66     //Statistics.getInstance().incrementDepartureErrors();
67     resp.sendError(500);
68     return;
69     } catch (Exception e) {
70     logger.log(Level.WARNING, "Unknown exception, metro-station=" +station, e);
71 torben 1401 //Statistics.getInstance().incrementDepartureErrors();
72 torben 1042 resp.sendError(500);
73     return;
74 torben 1041 }
75    
76    
77     }
78    
79 torben 1060 String formatXml(MetroBean metro) throws ServletException {
80 torben 1042
81 torben 1060 Serializer serializer = new Persister();
82    
83 torben 1190 StringWriter out = new StringWriter();
84 torben 1060
85     try {
86     serializer.write(metro, out);
87     } catch (Exception e) {
88     throw new ServletException(e);
89 torben 1042 }
90    
91 torben 1060 return out.toString();
92 torben 1042 }
93    
94 torben 1041 }

  ViewVC Help
Powered by ViewVC 1.1.20