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