1 package org.codehaus.xfire.transport.http;
2
3 import java.io.IOException;
4
5 import javax.servlet.ServletException;
6 import javax.servlet.http.HttpServlet;
7 import javax.servlet.http.HttpServletRequest;
8 import javax.servlet.http.HttpServletResponse;
9
10 import org.codehaus.xfire.XFire;
11 import org.codehaus.xfire.XFireFactory;
12
13 /***
14 * A servlet which processes incoming XFire requests.
15 * It delegates to the XFireController to process the request.
16 *
17 * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse </a>
18 * @since Feb 13, 2004
19 */
20 public class XFireServlet
21 extends HttpServlet
22 {
23 private XFire xfire;
24
25 private XFireServletController controller;
26
27 public void init()
28 throws ServletException
29 {
30 super.init();
31 xfire = createXFire();
32 controller = createController();
33 }
34
35 /***
36 * Get the xfire instance. if it hasn't been created, then {@link #createXFire()} will be called.
37 */
38 public XFire getXFire() throws ServletException
39 {
40 if (xfire == null) xfire = createXFire();
41
42 return xfire;
43 }
44
45 /***
46 * Get the xfire controller. if it hasn't been created, then {@link #createController()} will be called.
47 */
48 public XFireServletController getController() throws ServletException
49 {
50 if(controller == null) controller = createController();
51 return controller;
52 }
53
54 public XFire createXFire()
55 throws ServletException
56 {
57 try
58 {
59 XFireFactory factory = XFireFactory.newInstance();
60 return factory.getXFire();
61 }
62 catch (Exception e)
63 {
64 throw new ServletException("Couldn't start XFire.", e);
65 }
66 }
67
68 public XFireServletController createController()
69 throws ServletException
70 {
71 return new XFireServletController(xfire);
72 }
73
74 /***
75 * Delegates to {@link XFireServletController#doService(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)}.
76 */
77 protected void doGet(HttpServletRequest request,
78 HttpServletResponse response)
79 throws ServletException, IOException
80 {
81 controller.doService(request, response);
82 }
83
84 /***
85 * Delegates to {@link XFireServletController#doService(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)}.
86 */
87 protected void doPost(HttpServletRequest req, HttpServletResponse res)
88 throws ServletException, IOException
89 {
90 controller.doService(req, res);
91 }
92 }