1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.sun.syndication.fetcher.impl;
18
19 import java.io.BufferedReader;
20 import java.io.IOException;
21 import java.io.InputStream;
22 import java.io.InputStreamReader;
23
24 import javax.servlet.ServletException;
25 import javax.servlet.http.HttpServletRequest;
26 import javax.servlet.http.HttpServletResponse;
27
28
29 public class FetcherTestServlet extends javax.servlet.http.HttpServlet {
30
31 /***
32 * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
33 */
34 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
35
36 if ("TRUE".equalsIgnoreCase(request.getParameter("redirect"))) {
37
38 response.sendRedirect(request.getRequestURI());
39 return;
40 } else if (request.getParameter("error") != null) {
41
42 int errorToThrow = Integer.parseInt(request.getParameter("error"));
43 response.sendError(errorToThrow);
44 return;
45 } else {
46
47
48
49
50
51
52 String lastModifiedDate = "Thu, 08 Jan 2009 23:06:39 GMT";
53 String eTag = "123456";
54
55 if ("TRUE".equalsIgnoreCase(request.getParameter("refreshfeed"))) {
56 lastModifiedDate = "Fri, 09 Jan 2009 12:06:39 GMT";
57 eTag = "abcde";
58 }
59
60 boolean serveFeed = checkModified(request, lastModifiedDate, eTag);
61
62 if (serveFeed) {
63 sendFeedData(response, lastModifiedDate, eTag);
64 return;
65 } else {
66 response.sendError(HttpServletResponse.SC_NOT_MODIFIED);
67 return;
68 }
69 }
70 }
71
72 private boolean checkModified(HttpServletRequest request, String lastModifiedDate, String eTag) {
73
74 String requestedETag = request.getHeader("If-None-Match");
75 String requestedLastModified = request.getHeader("If-Modified-Since");
76 boolean modified = true;
77 boolean mustServer = false;
78 if (requestedETag != null) {
79 if (eTag.equals(requestedETag)) {
80 modified = false;
81 } else {
82 modified = true;
83 mustServer = true;
84 }
85 }
86 if (requestedLastModified != null) {
87 if (lastModifiedDate.equals(requestedLastModified)) {
88 modified = false;
89 } else {
90 modified = true;
91 mustServer = true;
92 }
93 }
94 boolean serveFeed = (modified || mustServer);
95 return serveFeed;
96 }
97
98 private void sendFeedData(HttpServletResponse response, String lastModifiedDate, String eTag) throws IOException {
99 response.setContentType("text/xml");
100 if (eTag != null) {
101 response.setHeader("ETag", eTag);
102 }
103 if (lastModifiedDate != null) {
104 response.setHeader("Last-Modified", lastModifiedDate);
105 }
106
107 InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("/atom_0.3.xml");
108 if (inputStream == null) {
109 inputStream = this.getClass().getResourceAsStream("/atom_0.3.xml");
110 }
111
112 BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
113 try {
114 String line;
115 while ((line = reader.readLine()) != null) {
116
117 response.getOutputStream().write(line.getBytes());
118 line = null;
119 }
120 } finally {
121 if (reader != null) {
122 reader.close();
123 }
124 }
125 }
126 }