Source code: org/roller/presentation/xmlrpc/XmlRpcServlet.java
1 /*
2 * XmlRpcServlet.java
3 *
4 * Created on June 5, 2002, 2:11 PM
5 */
6
7 package org.roller.presentation.xmlrpc;
8
9 import java.io.OutputStream;
10
11 import java.lang.Exception;
12
13 import javax.servlet.ServletConfig;
14 import javax.servlet.ServletException;
15 import javax.servlet.http.HttpServlet;
16 import javax.servlet.http.HttpServletRequest;
17 import javax.servlet.http.HttpServletResponse;
18
19 import org.roller.Logger;
20 import org.roller.business.castor.RollerImpl;
21 import org.roller.model.Roller;
22 import org.roller.presentation.RollerRequest;
23 import org.roller.presentation.ServletLogger;
24
25 import org.apache.xmlrpc.XmlRpcServer;
26
27 /**
28 * Roller's XmlRpcServlet sets up XmlRpcHandler for Blogger API.
29 * @author Shawn Dahlen
30 * @web:servlet name="XmlRpcServlet"
31 * @web:servlet-mapping url-pattern="/xmlrpc"
32 */
33 public class XmlRpcServlet extends HttpServlet
34 {
35 private XmlRpcServer xmlrpc;
36
37 /** Initializes the servlet.
38 */
39 public void init(ServletConfig config) throws ServletException
40 {
41 super.init(config);
42 xmlrpc = new XmlRpcServer();
43 Logger logger = new ServletLogger(config.getServletContext());
44 try
45 {
46 // creates instance of Roller for the xml-rpc handlers
47 String databaseXML = config.getServletContext().getResource(
48 "/WEB-INF/database.xml" ).toString();
49 Roller roller = new RollerImpl(databaseXML, logger);
50
51 // adds the blogger handler to xml-rpc server
52 xmlrpc.addHandler("blogger", new BloggerHandler(roller));
53 }
54 catch (Exception e)
55 {
56 logger.log("Initialization of XML-RPC servlet failed", e);
57 }
58 }
59
60 /** Destroys the servlet.
61 */
62 public void destroy()
63 {
64 }
65
66 protected void processRequest(HttpServletRequest request,
67 HttpServletResponse response)
68 throws ServletException, java.io.IOException
69 {
70 byte[] result = xmlrpc.execute(request.getInputStream());
71
72 response.setContentType("text/xml");
73 response.setContentLength(result.length);
74
75 // KLUDGE: flush Roller's page cache on every Blogger API call
76 // Need to be smarter about this, but the XML-RPC service does
77 // not know about Servlet's, requests, etc.
78 org.roller.presentation.caching.PageCache.flushCache(
79 request.getSession().getServletContext());
80
81 OutputStream output = response.getOutputStream();
82 output.write(result);
83 output.flush();
84 }
85
86 protected void doGet(HttpServletRequest request,
87 HttpServletResponse response)
88 throws ServletException, java.io.IOException
89 {
90 processRequest(request, response);
91 }
92
93 protected void doPost(HttpServletRequest request,
94 HttpServletResponse response)
95 throws ServletException, java.io.IOException
96 {
97 processRequest(request, response);
98 }
99 }