View Javadoc

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   * Handles error cases with SOAP fault responses for an application that is unable to handle normal requests.
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  }