@Override protected void executeRequest(HttpClient httpClient, HttpUriRequest request) { Object fullBody = null; Throwable error = null; HttpResponse response = null; try { if (request.isAborted()) { respondWithResult( fullBody, new Exception(String.format("%s: Request %s has been aborted", this, request)), response); return; } response = httpClient.execute(request); try { // add in cookies to global store if (httpClient instanceof DefaultHttpClient) { DefaultHttpClient defaultHttpClient = (DefaultHttpClient) httpClient; clientFactory.addCookies(defaultHttpClient.getCookieStore().getCookies()); } } catch (Exception e) { Log.e(Log.TAG_REMOTE_REQUEST, "Unable to add in cookies to global store", e); } StatusLine status = response.getStatusLine(); if (status.getStatusCode() >= 300) { Log.e( Log.TAG_REMOTE_REQUEST, "Got error status: %d for %s. Reason: %s", status.getStatusCode(), request, status.getReasonPhrase()); error = new HttpResponseException(status.getStatusCode(), status.getReasonPhrase()); } else { HttpEntity entity = null; try { entity = response.getEntity(); if (entity != null) { InputStream inputStream = null; try { inputStream = entity.getContent(); Header contentTypeHeader = entity.getContentType(); if (contentTypeHeader != null) { // multipart if (contentTypeHeader.getValue().contains("multipart/")) { Log.v(Log.TAG_SYNC, "contentTypeHeader = %s", contentTypeHeader.getValue()); _topReader = new MultipartReader(contentTypeHeader.getValue(), this); byte[] buffer = new byte[BUF_LEN]; int numBytesRead = 0; while ((numBytesRead = inputStream.read(buffer)) != -1) { _topReader.appendData(buffer, 0, numBytesRead); } _topReader.finished(); respondWithResult(fullBody, error, response); } // non-multipart else { Log.v( Log.TAG_SYNC, "contentTypeHeader is not multipart = %s", contentTypeHeader.getValue()); GZIPInputStream gzipStream = null; try { // decompress if contentEncoding is gzip if (Utils.isGzip(entity)) { gzipStream = new GZIPInputStream(inputStream); fullBody = Manager.getObjectMapper().readValue(gzipStream, Object.class); } else { fullBody = Manager.getObjectMapper().readValue(inputStream, Object.class); } respondWithResult(fullBody, error, response); } finally { try { if (gzipStream != null) { gzipStream.close(); } } catch (IOException e) { } gzipStream = null; } } } } finally { try { if (inputStream != null) { inputStream.close(); } } catch (IOException e) { } inputStream = null; } } } finally { if (entity != null) { try { entity.consumeContent(); } catch (IOException e) { } } entity = null; } } } catch (IOException e) { Log.e(Log.TAG_REMOTE_REQUEST, "io exception", e); error = e; } catch (Exception e) { Log.e(Log.TAG_REMOTE_REQUEST, "%s: executeRequest() Exception: ", e, this); error = e; } finally { Log.v(Log.TAG_SYNC, "%s: BulkDownloader finally block. url: %s", this, url); } Log.v( Log.TAG_SYNC, "%s: BulkDownloader calling respondWithResult. url: %s, error: %s", this, url, error); respondWithResult(fullBody, error, response); }