Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

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  }