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 JohnsonSoapFilter extends AbstractJohnsonFilter {
15
16 public static final Logger LOG = LoggerFactory.getLogger(JohnsonSoapFilter.class);
17
18 protected String buildSoapFault(String errorMessage) {
19 return "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
20 "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"\n" +
21 " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n" +
22 " <soapenv:Body>\n" +
23 " <soapenv:Fault>\n" +
24 " <faultcode>soapenv:Server</faultcode>\n" +
25 " <faultstring>" +
26 errorMessage +
27 " </faultstring>\n" +
28 " </soapenv:Fault>\n" +
29 " </soapenv:Body>\n" +
30 "</soapenv:Envelope>";
31 }
32
33 protected void handleError(JohnsonEventContainer appEventContainer, HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws IOException {
34 LOG.info("The application is unavailable, or there are errors. Returning a SOAP fault with the event message.");
35 servletResponse.setContentType(TEXT_XML_UTF8_CONTENT_TYPE);
36 String message = getStringForEvents(appEventContainer.getEvents());
37 servletResponse.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
38 servletResponse.getWriter().write(buildSoapFault(message));
39 }
40
41 protected void handleNotSetup(HttpServletRequest servletRequest, HttpServletResponse servletResponse) throws IOException {
42 LOG.info("The application is not setup. Returning a SOAP fault with a 'not setup' message.");
43 servletResponse.setContentType(TEXT_XML_UTF8_CONTENT_TYPE);
44 String message = "The application has not yet been setup.";
45 servletResponse.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
46 servletResponse.getWriter().write(buildSoapFault(message));
47 }
48 }