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
12
13 public class JohnsonXmlRpcFilter extends AbstractJohnsonFilter
14 {
15 public static final Category log = Category.getInstance(JohnsonXmlRpcFilter.class);
16
17
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 }