@Override public FilterDirector handleResponse( HttpServletRequest request, ReadableHttpServletResponse response) { FilterDirector filterDirector = new FilterDirectorImpl(); filterDirector.setResponseStatusCode(response.getStatus()); filterDirector.setFilterAction(FilterAction.PASS); for (HttpLoggerWrapper loggerWrapper : loggers) { loggerWrapper.handle(request, response); } return filterDirector; }
@Override public FilterDirector handleResponse( HttpServletRequest httpRequest, ReadableHttpServletResponse httpResponse) { MutableHttpServletRequest request = MutableHttpServletRequest.wrap(httpRequest); MutableHttpServletResponse response = MutableHttpServletResponse.wrap(httpRequest, httpResponse); final FilterDirector filterDirector = new FilterDirectorImpl(); filterDirector.setFilterAction(FilterAction.PASS); MediaType contentType = getContentType(response.getHeaderValue("Content-Type")); List<MediaType> acceptValues = getAcceptValues(request.getPreferredHeaders("Accept", DEFAULT_TYPE)); List<XmlChainPool> pools = getHandlerChainPool( "", contentType, acceptValues, String.valueOf(response.getStatus()), responseProcessors); if (pools.isEmpty()) { filterDirector.setResponseStatusCode(response.getStatus()); return filterDirector; } try { filterDirector.setResponseStatusCode(response.getStatus()); if (response.hasBody()) { InputStream in = response.getBufferedOutputAsInputStream(); TranslationResult result = null; for (XmlChainPool pool : pools) { if (in.available() > 0) { result = pool.executePool( new TranslationPreProcessor(in, contentType, true).getBodyStream(), filterDirector.getResponseOutputStream(), getInputParameters(TranslationType.RESPONSE, request, response, result)); if (result.isSuccess()) { result.applyResults(filterDirector); if (StringUtilities.isNotBlank(pool.getResultContentType())) { filterDirector .requestHeaderManager() .putHeader("content-type", pool.getResultContentType()); contentType = getContentType(pool.getResultContentType()); } in = new ByteArrayInputStream(filterDirector.getResponseMessageBodyBytes()); } else { filterDirector.setResponseStatus(HttpStatusCode.INTERNAL_SERVER_ERROR); response.setContentLength(0); filterDirector.responseHeaderManager().removeHeader("Content-Length"); break; } } } } } catch (IOException ex) { LOG.error("Error executing response transformer chain", ex); filterDirector.setResponseStatus(HttpStatusCode.INTERNAL_SERVER_ERROR); response.setContentLength(0); } return filterDirector; }