@Override public void closeResponse(final CloseableHttpResponse response) throws CloudstackRESTException { try { s_logger.debug("Closing HTTP connection"); response.close(); } catch (final IOException e) { final StringBuilder sb = new StringBuilder(); sb.append("Failed to close response object for request.\nResponse: ").append(response); throw new CloudstackRESTException(sb.toString(), e); } }
private <T> T readResponseBody(final CloseableHttpResponse response, final Type type) throws CloudstackRESTException { final HttpEntity entity = response.getEntity(); try { final String stringEntity = EntityUtils.toString(entity); //s_logger.debug("Response entity: " + stringEntity); EntityUtils.consumeQuietly(entity); return gson.fromJson(stringEntity, type); } catch (final IOException e) { throw new CloudstackRESTException("Could not deserialize response to JSON. Entity: " + entity, e); } finally { client.closeResponse(response); } }
@Override public CloseableHttpResponse execute(final HttpUriRequest request) throws CloudstackRESTException { logRequestExecution(request); try { return client.execute(clientContext.getTargetHost(), request, clientContext); } catch (final IOException e) { throw new CloudstackRESTException("Could not execute request " + request, e); } }
protected NiciraNvpApi createNiciraNvpApi(final String host, final String username, final String password) throws CloudstackRESTException { try { return NiciraNvpApi.create().host(host).username(username).password(password).httpClient(HttpClientHelper.createHttpClient(MAX_REDIRECTS)).build(); } catch (final KeyManagementException e) { throw new CloudstackRESTException("Could not create HTTP client", e); } catch (final NoSuchAlgorithmException e) { throw new CloudstackRESTException("Could not create HTTP client", e); } catch (final KeyStoreException e) { throw new CloudstackRESTException("Could not create HTTP client", e); } }
private CloseableHttpResponse execute(final HttpUriRequest request, final int previousStatusCode) throws CloudstackRESTException { if (counter.hasReachedExecutionLimit()) { throw new CloudstackRESTException("Reached max executions limit of " + executionLimit); } counter.incrementExecutionCounter(); s_logger.debug("Executing " + request.getMethod() + " request [execution count = " + counter.getValue() + "]"); final CloseableHttpResponse response = super.execute(request); final StatusLine statusLine = response.getStatusLine(); final int statusCode = statusLine.getStatusCode(); s_logger.debug("Status of last request: " + statusLine.toString()); if (HttpStatusCodeHelper.isUnauthorized(statusCode)) { return handleUnauthorizedResponse(request, previousStatusCode, response, statusCode); } else if (HttpStatusCodeHelper.isSuccess(statusCode)) { return handleSuccessResponse(request, response); } else if (HttpStatusCodeHelper.isConflict(statusCode)) { throw new CloudstackRESTException("Conflict: " + statusLine.getReasonPhrase(), statusCode); } else { throw new CloudstackRESTException("Unexpected status code: " + statusCode, statusCode); } }
private CloseableHttpResponse handleUnauthorizedResponse(final HttpUriRequest request, final int previousStatusCode, final CloseableHttpResponse response, final int statusCode) throws CloudstackRESTException { super.closeResponse(response); if (HttpStatusCodeHelper.isUnauthorized(previousStatusCode)) { s_logger.error(responseToErrorMessage(response)); throw new CloudstackRESTException("Two consecutive failed attempts to authenticate against REST server"); } final HttpUriRequest authenticateRequest = createAuthenticationRequest(); final CloseableHttpResponse loginResponse = execute(authenticateRequest, statusCode); final int loginStatusCode = loginResponse.getStatusLine().getStatusCode(); super.closeResponse(loginResponse); return execute(request, loginStatusCode); }