protected HttpResponse doRequest(HttpRequest request, RequestLine requestLine) throws IOException, MuleException { Map headers = parseHeaders(request); // TODO Mule 2.0 generic way to set stream message adapter MessageAdapter adapter = buildStandardAdapter(request, headers); MuleMessage message = new DefaultMuleMessage(adapter, connector.getMuleContext()); String path = (String) message.getProperty(HttpConnector.HTTP_REQUEST_PROPERTY); int i = path.indexOf('?'); if (i > -1) { path = path.substring(0, i); } message.setProperty(HttpConnector.HTTP_REQUEST_PATH_PROPERTY, path); if (logger.isDebugEnabled()) { logger.debug(message.getProperty(HttpConnector.HTTP_REQUEST_PROPERTY)); } // determine if the request path on this request denotes a different receiver MessageReceiver receiver = getTargetReceiver(message, endpoint); HttpResponse response; // the response only needs to be transformed explicitly if // A) the request was not served or B) a null result was returned if (receiver != null) { message.setProperty( HttpConnector.HTTP_CONTEXT_PATH_PROPERTY, HttpConnector.normalizeUrl(receiver.getEndpointURI().getPath())); preRouteMessage(message); MuleMessage returnMessage = receiver.routeMessage(message, endpoint.isSynchronous(), null); Object tempResponse; if (returnMessage != null) { tempResponse = returnMessage.getPayload(); } else { tempResponse = NullPayload.getInstance(); } // This removes the need for users to explicitly adding the response transformer // ObjectToHttpResponse in their config if (tempResponse instanceof HttpResponse) { response = (HttpResponse) tempResponse; } else { response = transformResponse(returnMessage); } response.setupKeepAliveFromRequestVersion(request.getRequestLine().getHttpVersion()); HttpConnector httpConnector = (HttpConnector) connector; response.disableKeepAlive(!httpConnector.isKeepAlive()); Header connectionHeader = request.getFirstHeader("Connection"); if (connectionHeader != null) { String value = connectionHeader.getValue(); boolean endpointOverride = getEndpointKeepAliveValue(endpoint); if ("keep-alive".equalsIgnoreCase(value) && endpointOverride) { response.setKeepAlive(true); Header header = new Header( HttpConstants.HEADER_KEEP_ALIVE, "timeout=" + httpConnector.getKeepAliveTimeout()); response.addHeader(header); if (response.getHttpVersion().equals(HttpVersion.HTTP_1_0)) { connectionHeader = new Header(HttpConstants.HEADER_CONNECTION, "Keep-Alive"); response.setHeader(connectionHeader); } } else if ("close".equalsIgnoreCase(value)) { response.setKeepAlive(false); } } } else { response = buildFailureResponse(requestLine, message); } return response; }