/* * Copyright 2013 Guidewire Software, Inc. */ package gw.internal.xml.ws.server; import gw.util.ILogger; import gw.xml.XmlException; import gw.xml.ws.HttpHeaders; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.OutputStream; import javax.servlet.http.HttpServletResponse; public class ServletWebservicesResponseAdapter extends WebservicesResponseAdapter { private final HttpServletResponse _response; private HttpHeaders _httpHeaders; private final ILogger _logger; public ServletWebservicesResponseAdapter( HttpServletResponse response, ILogger logger ) { _response = response; _logger = logger; } @Override public void sendError( int error, XmlException ex ) throws IOException { _response.setStatus( error ); } @Override public void setStatus( int status ) { _response.setStatus( status ); } @Override public void setContentType( String contentType ) { _response.setContentType( contentType ); } @Override public OutputStream getOutputStream() throws IOException { // if any io exceptions occur while writing to the output stream, we should just debug log, but otherwise ignore those errors... return new DebugLoggingOutputStream( _response.getOutputStream(), _logger ); } @Override public HttpHeaders getHttpHeaders() { if ( _httpHeaders == null ) { _httpHeaders = new HttpHeaders(); } return _httpHeaders; } public void commitHttpHeaders() { if ( _httpHeaders != null ) { for ( String headerName : _httpHeaders.getHeaderNames() ) { String headerValue = _httpHeaders.getHeader( headerName ); _response.setHeader( headerName, headerValue ); } } } }