/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* (c) 2001 - 2013 OpenPlans
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.ows;
import java.util.logging.Level;
import javax.servlet.http.HttpServletResponse;
import org.geoserver.platform.ServiceException;
/**
* Wrapping service exception handler that wraps content from a delegate handler in a soap Fault
* wrapper.
*
* @author Justin Deoliveira, OpenGeo
*
*/
public class SOAPServiceExceptionHandler extends ServiceExceptionHandler {
ServiceExceptionHandler delegate;
public SOAPServiceExceptionHandler(ServiceExceptionHandler delegate) {
super(delegate.getServices());
this.delegate = delegate;
}
@Override
public void handleServiceException(ServiceException exception, Request request) {
HttpServletResponse response = request.getHttpResponse();
response.setContentType(Dispatcher.SOAP_MIME);
try {
//write out the Fault header
StringBuilder sb = new StringBuilder("<soap:Fault xmlns:soap='").append(Dispatcher.SOAP_NS)
.append("'>");
if (exception.getCode() != null) {
sb.append("<soap:faultcode>").append(exception.getCode()).append("</soap:faultcode>");
}
sb.append("<soap:faultstring>").append(exception.getLocalizedMessage()).append("</soap:faultstring>");
sb.append("<soap:detail>");
response.getOutputStream().write(sb.toString().getBytes());
//delegate
delegate.handleServiceException(exception, request);
//write out the Fault footer
response.getOutputStream().write("</soap:detail></soap:Fault>".getBytes());
}
catch(Exception e) {
LOGGER.log(Level.INFO, "Error encoding SOAP fault", e);
}
}
}