1 package com.atlassian.johnson.filters;
2
3 import com.atlassian.johnson.JohnsonEventContainer;
4 import org.slf4j.Logger;
5 import org.slf4j.LoggerFactory;
6
7 import javax.servlet.http.HttpServletResponse;
8 import javax.servlet.http.HttpServletRequest;
9 import java.io.IOException;
10
11
12
13
14 public class JohnsonXmlRpcFilter extends AbstractJohnsonFilter
15 {
16
17
18 public static final int FAULT_CODE = 0;
19
20 private static final Logger LOG = LoggerFactory.getLogger(JohnsonXmlRpcFilter.class);
21
22 protected String buildXmlRpcErrorMessage(String error, int faultCode)
23 {
24 return "<?xml version=\"1.0\"?>\n" +
25 "<methodResponse>\n" +
26 " <fault>\n" +
27 " <value>\n" +
28 " <struct>\n" +
29 " <member>\n" +
30 " <name>faultString</name>\n" +
31 " <value>" +
32 error +
33 "</value>\n" +
34 " </member>\n" +
35 " <member>\n" +
36 " <name>faultCode</name>\n" +
37 " <value>\n" +
38 " <int>" +
39 faultCode +
40 "</int>\n" +
41 " </value>\n" +
42 " </member>\n" +
43 " </struct>\n" +
44 " </value>\n" +
45 " </fault>\n" +
46 "</methodResponse>";
47 }
48
49 protected void handleError(JohnsonEventContainer appEventContainer, HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws IOException
50 {
51 LOG.info("The application is unavailable, or there are errors. Returning a SOAP fault with the event message.");
52 servletResponse.setContentType(TEXT_XML_UTF8_CONTENT_TYPE);
53 String message = getStringForEvents(appEventContainer.getEvents());
54 servletResponse.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
55 servletResponse.getWriter().write(buildXmlRpcErrorMessage(message, FAULT_CODE));
56 }
57
58 protected void handleNotSetup(HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws IOException
59 {
60 LOG.info("The application is not setup. Returning a SOAP fault with a 'not setup' message.");
61 servletResponse.setContentType(TEXT_XML_UTF8_CONTENT_TYPE);
62 String message = "The application has not yet been setup.";
63 servletResponse.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
64 servletResponse.getWriter().write(buildXmlRpcErrorMessage(message, FAULT_CODE));
65 }
66 }