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