public Object transform(MuleMessage msg, String outputEncoding) throws TransformerException { Object src = msg.getPayload(); // Send back the exception payload if one has been set if (msg.getExceptionPayload() != null) { // src = context.getMessage().getExceptionPayload(); } // Note this transformer excepts Null as we must always return a result // from the Http // connector if a response transformer is present if (src instanceof NullPayload) { src = StringUtils.EMPTY; } try { HttpResponse response; if (src instanceof HttpResponse) { response = (HttpResponse) src; } else { response = createResponse(src, outputEncoding, msg); } // Ensure there's a content type header if (!response.containsHeader(HttpConstants.HEADER_CONTENT_TYPE)) { response.addHeader( new Header(HttpConstants.HEADER_CONTENT_TYPE, HttpConstants.DEFAULT_CONTENT_TYPE)); } // Ensure there's a content length or transfer encoding header if (!response.containsHeader(HttpConstants.HEADER_CONTENT_LENGTH) && !response.containsHeader(HttpConstants.HEADER_TRANSFER_ENCODING)) { if (response.hasBody()) { long len = response.getContentLength(); if (len < 0) { if (response.getHttpVersion().lessEquals(HttpVersion.HTTP_1_0)) { throw new IOException( "Chunked encoding not supported for HTTP version " + response.getHttpVersion()); } Header header = new Header(HttpConstants.HEADER_TRANSFER_ENCODING, "chunked"); response.addHeader(header); } else { Header header = new Header(HttpConstants.HEADER_CONTENT_LENGTH, Long.toString(len)); response.setHeader(header); } } else { Header header = new Header(HttpConstants.HEADER_CONTENT_LENGTH, "0"); response.addHeader(header); } } if (!response.containsHeader(HttpConstants.HEADER_CONNECTION)) { // See if the the client explicitly handles connection persistence String connHeader = msg.getStringProperty(HttpConstants.HEADER_CONNECTION, null); if (connHeader != null) { if (connHeader.equalsIgnoreCase("keep-alive")) { Header header = new Header(HttpConstants.HEADER_CONNECTION, "keep-alive"); response.addHeader(header); response.setKeepAlive(true); } if (connHeader.equalsIgnoreCase("close")) { Header header = new Header(HttpConstants.HEADER_CONNECTION, "close"); response.addHeader(header); response.setKeepAlive(false); } } else { // Use protocol default connection policy if (response.getHttpVersion().greaterEquals(HttpVersion.HTTP_1_1)) { response.setKeepAlive(true); } else { response.setKeepAlive(false); } } } if ("HEAD" .equalsIgnoreCase(msg.getStringProperty(HttpConnector.HTTP_METHOD_PROPERTY, null))) { // this is a head request, we don't want to send the actual content response.setBody((MuleMessage) null); } return response; } catch (IOException e) { throw new TransformerException(this, e); } }