private int dispatch(HttpWebRequest webRequest, Authenticator authenticator, HttpResponseHandler responseHandler) { HttpWebResponse webResponse; try { webResponse = (HttpWebResponse)webRequest.GetResponse(); } catch (WebException e) { webResponse = (HttpWebResponse)e.Response; } Stream entityStream = null; try { entityStream = webResponse.GetResponseStream(); WebHeaderCollection responseHeaders = webResponse.Headers; if (null != authenticator) { authenticator.handleHttpResponseHeaders(responseHeaders); } int statusCode = (int)webResponse.StatusCode; if (statusCode >= 200 && statusCode < 300) { // all is well if (null == entityStream) // e.g. http 204 { responseHandler.handleResponseEntity(responseHeaders, null); } else { long contentLength = webResponse.ContentLength; log.debug(contentLength, "contentLength"); StreamEntity responseEntity = new StreamEntity(contentLength, entityStream); responseHandler.handleResponseEntity(responseHeaders, responseEntity); } } return statusCode; } finally { if (null != entityStream) { StreamHelper.close(entityStream, false, this); } } }