View Javadoc

1   package com.atlassian.johnson.filters;
2   
3   import com.atlassian.johnson.JohnsonEventContainer;
4   import org.apache.log4j.Category;
5   
6   import javax.servlet.http.HttpServletResponse;
7   import javax.servlet.http.HttpServletRequest;
8   import java.io.IOException;
9   
10  /**
11   * Handles error cases with XmlRpc fault responses for an application that is unable to handle normal requests.
12   */
13  public class JohnsonXmlRpcFilter extends AbstractJohnsonFilter
14  {
15      public static final Category log = Category.getInstance(JohnsonXmlRpcFilter.class);
16      // NOTE: there is no clear definition of what this fault code should be, http://www.xmlrpc.com/spec
17      // it seems that Axis is using 0 so we will also :)
18      private static final int FAULT_CODE = 0;
19  
20      protected void handleError(JohnsonEventContainer appEventContainer, HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws IOException
21      {
22          log.info("The application is unavailable, or there are errors.  Returning a SOAP fault with the event message.");
23          servletResponse.setContentType(TEXT_XML_UTF8_CONTENT_TYPE);
24          String message = getStringForEvents(appEventContainer.getEvents());
25          servletResponse.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
26          servletResponse.getWriter().write(buildXmlRpcErrorMessage(message, FAULT_CODE));
27      }
28  
29      protected void handleNotSetup(HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws IOException
30      {
31          log.info("The application is not setup.  Returning a SOAP fault with a 'not setup' message.");
32          servletResponse.setContentType(TEXT_XML_UTF8_CONTENT_TYPE);
33          String message = "The application has not yet been setup.";
34          servletResponse.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
35          servletResponse.getWriter().write(buildXmlRpcErrorMessage(message, FAULT_CODE));
36      }
37  
38      String buildXmlRpcErrorMessage(String error, int faultCode)
39      {
40          return "<?xml version=\"1.0\"?>\n" +
41                  "<methodResponse>\n" +
42                  "    <fault>\n" +
43                  "        <value>\n" +
44                  "            <struct>\n" +
45                  "                <member>\n" +
46                  "                    <name>faultString</name>\n" +
47                  "                    <value>" +
48                  error +
49                  "</value>\n" +
50                  "                </member>\n" +
51                  "                <member>\n" +
52                  "                    <name>faultCode</name>\n" +
53                  "                    <value>\n" +
54                  "                        <int>" +
55                  faultCode +
56                  "</int>\n" +
57                  "                    </value>\n" +
58                  "                </member>\n" +
59                  "            </struct>\n" +
60                  "        </value>\n" +
61                  "    </fault>\n" +
62                  "</methodResponse>";
63      }
64  }