private Response executeApiCall(HttpRequestBase httpPost) throws IOException { try { CloseableHttpResponse serverResponse = httpClient.execute(httpPost); try { Response response = getResponse(serverResponse); if(response.getStatusCode() >= 300) { //throwing IOException here to not break API behavior. throw new IOException("Request returned status Code "+response.getStatusCode()+"Body:"+response.getBody()); } return response; } finally { serverResponse.close(); } } catch(ClientProtocolException e) { throw new IOException(e.getMessage()); } }
public Response() { this.reset(); }
request.setBody(mail.build()); Response response = sg.api(request); log.info("Status Code: {}", String.valueOf(response.getStatusCode())); log.info("Body: {}", response.getBody()); for ( String key : response.getHeaders().keySet()) { String value = response.getHeaders().get(key); log.info("Response Header {} => {}", key, value);
@Override public void run() { Response response; // Retry until the retry limit has been reached. for (int i = 0; i < rateLimitRetry; ++i) { try { response = api(request); } catch (IOException ex) { // Stop retrying if there is a network error. callback.error(ex); return; } // We have been rate limited. if (response.getStatusCode() == RATE_LIMIT_RESPONSE_CODE) { try { Thread.sleep(rateLimitSleep); } catch (InterruptedException ex) { // Can safely ignore this exception and retry. } } else { callback.response(response); return; } } // Retries exhausted. Return error. callback.error(new RateLimitException(request, rateLimitRetry)); } });
/** * Prepare a Response object from an API call via Apache's HTTP client. * * @param response * from a call to a CloseableHttpClient */ public Response getResponse(CloseableHttpResponse response) throws IOException { ResponseHandler<String> handler = new SendGridResponseHandler(); String responseBody = ""; int statusCode = response.getStatusLine().getStatusCode(); responseBody = handler.handleResponse(response); Header[] headers = response.getAllHeaders(); Map<String, String> responseHeaders = new HashMap<String, String>(); for (Header h : headers) { responseHeaders.put(h.getName(), h.getValue()); } return new Response(statusCode, responseBody, responseHeaders); }
@Override public void run() { Response response; // Retry until the retry limit has been reached. for (int i = 0; i < rateLimitRetry; ++i) { try { response = api(request); } catch (IOException ex) { // Stop retrying if there is a network error. callback.error(ex); return; } // We have been rate limited. if (response.getStatusCode() == RATE_LIMIT_RESPONSE_CODE) { try { Thread.sleep(rateLimitSleep); } catch (InterruptedException ex) { // Can safely ignore this exception and retry. } } else { callback.response(response); return; } } // Retries exhausted. Return error. callback.error(new RateLimitException(request, rateLimitRetry)); } });