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 return "<?xml version=\"1.0\"?>\n" +
24 "<methodResponse>\n" +
25 " <fault>\n" +
26 " <value>\n" +
27 " <struct>\n" +
28 " <member>\n" +
29 " <name>faultString</name>\n" +
30 " <value>" +
31 error +
32 "</value>\n" +
33 " </member>\n" +
34 " <member>\n" +
35 " <name>faultCode</name>\n" +
36 " <value>\n" +
37 " <int>" +
38 faultCode +
39 "</int>\n" +
40 " </value>\n" +
41 " </member>\n" +
42 " </struct>\n" +
43 " </value>\n" +
44 " </fault>\n" +
45 "</methodResponse>";
46 }
47
48 protected void handleError(JohnsonEventContainer appEventContainer, HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws IOException {
49 LOG.info("The application is unavailable, or there are errors. Returning a SOAP fault with the event message.");
50 servletResponse.setContentType(TEXT_XML_UTF8_CONTENT_TYPE);
51 String message = getStringForEvents(appEventContainer.getEvents());
52 servletResponse.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
53 servletResponse.getWriter().write(buildXmlRpcErrorMessage(message, FAULT_CODE));
54 }
55
56 protected void handleNotSetup(HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws IOException {
57 LOG.info("The application is not setup. Returning a SOAP fault with a 'not setup' message.");
58 servletResponse.setContentType(TEXT_XML_UTF8_CONTENT_TYPE);
59 String message = "The application has not yet been setup.";
60 servletResponse.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
61 servletResponse.getWriter().write(buildXmlRpcErrorMessage(message, FAULT_CODE));
62 }
63 }