@Override
 public String getStringResponse(
     String root, String path, Mappable params, Map<String, String> headers) {
   try {
     int idx = path.indexOf(configuration.getVersion());
     if (idx > -1) path = path.substring(idx + configuration.getVersion().length());
     MultivaluedMap<String, String> queryParams =
         params == null ? new MultivaluedMapImpl() : params.toMap();
     WebResource resource =
         getClient()
             .resource(root)
             .path(configuration.getVersion())
             .path(path)
             .queryParams(queryParams);
     WebResource.Builder builder = resource.getRequestBuilder();
     if (headers != null) {
       for (String key : headers.keySet()) {
         builder = resource.header(key, headers.get(key));
       }
     }
     String response =
         builder
             .accept(MediaType.APPLICATION_JSON, MediaType.APPLICATION_XHTML_XML)
             .get(String.class);
     logger.fine(response);
     return response;
   } catch (BaseSpaceException bs) {
     throw bs;
   } catch (Throwable t) {
     throw new RuntimeException(t);
   }
 }
 @SuppressWarnings("unchecked")
 protected <T extends ApiResponse<?, ?>> T postInternal(
     Class<? extends ApiResponse<?, ?>> clazz,
     String root,
     String path,
     Map<String, String> headers,
     Object data,
     String mediaType) {
   try {
     WebResource webResource =
         getClient().resource(root).path(configuration.getVersion()).path(path);
     WebResource.Builder builder = webResource.getRequestBuilder();
     builder = builder.header("Content-Type", mediaType);
     if (headers != null) {
       for (String key : headers.keySet()) {
         builder = builder.header(key, headers.get(key));
       }
     }
     logger.fine(data.toString());
     String response = builder.accept(mediaType).post(String.class, data);
     logger.fine(response);
     return (T) TypeHelper.INSTANCE.getObjectMapper().readValue(response, clazz);
   } catch (BaseSpaceException bs) {
     throw bs;
   } catch (Throwable t) {
     t.printStackTrace();
     throw new RuntimeException(t);
   }
 }
  /*
   * Send DELETE request to KittyHawk server, and handle redirect/cookies
   *
   * @param resource webResource
   *
   * @param param parameters for delete
   *
   * @throws VNXeException
   */
  public ClientResponse deleteRequest(Object param) throws VNXeException {
    _logger.debug("delete data: " + _url);
    ClientResponse response = sendDeleteRequest(param);

    Status statusCode = response.getClientResponseStatus();
    if (statusCode == ClientResponse.Status.OK
        || statusCode == ClientResponse.Status.ACCEPTED
        || statusCode == ClientResponse.Status.NO_CONTENT) {
      return response;
    } else if (response.getClientResponseStatus() == ClientResponse.Status.UNAUTHORIZED) {
      authenticate();
      response = sendDeleteRequest(param);
      statusCode = response.getClientResponseStatus();
      if (statusCode == ClientResponse.Status.OK
          || statusCode == ClientResponse.Status.ACCEPTED
          || statusCode == ClientResponse.Status.NO_CONTENT) {
        return response;
      }
    }
    int redirectTimes = 1;
    // handle redirect
    while (response.getClientResponseStatus() == ClientResponse.Status.FOUND
        && redirectTimes < VNXeConstants.REDIRECT_MAX) {

      String code = response.getClientResponseStatus().toString();
      String data = response.getEntity(String.class);
      _logger.debug("Returned code: {} returned data: ", code, data);
      WebResource resource = handelRedirect(response);
      if (resource != null) {
        response =
            buildRequest(resource.getRequestBuilder()).entity(param).delete(ClientResponse.class);
        redirectTimes++;
      } else {
        // could not find the redirect url, return
        _logger.error(
            String.format(
                "The post request to: %s failed with: %s %s",
                _url,
                response.getClientResponseStatus().toString(),
                response.getEntity(String.class)));
        throw VNXeException.exceptions.unexpectedDataError(
            "Got redirect status code, but could not get redirected URL");
      }
    }
    if (redirectTimes >= VNXeConstants.REDIRECT_MAX) {
      _logger.error("redirected too many times for the request {} ", _url);
      throw VNXeException.exceptions.unexpectedDataError(
          "Redirected too many times while sending the request for " + _url);
    }

    checkResponse(response, DELETE_REQUEST);

    return response;
  }
示例#4
0
  protected Builder getResource(String url, Map<String, String> headerParameters) {
    WebResource webResource = getClient().resource(url);
    if (headerParameters != null) {
      Set<String> keySet = headerParameters.keySet();

      Builder requestBuilder = webResource.getRequestBuilder();
      for (String key : keySet) {
        requestBuilder.header(key, headerParameters.get(key));
      }
      return requestBuilder.accept(MediaType.APPLICATION_JSON_TYPE);
    }
    return webResource.accept(MediaType.APPLICATION_JSON_TYPE);
  }
 protected Builder addNecessaryHeaders(URI uri, WebResource resource) {
   Map<String, Object> headers = cachedHeaders.get(uri.toString());
   Builder builder = resource.getRequestBuilder();
   if (headers != null) {
     final Object etag = headers.get(HttpHeaders.ETAG);
     if (etag != null) {
       builder.header(HttpHeaders.IF_MATCH, etag);
     }
     final Object lastModified = headers.get(HttpHeaders.LAST_MODIFIED);
     if (lastModified != null) {
       builder.header(HttpHeaders.IF_UNMODIFIED_SINCE, lastModified);
     }
   }
   return builder;
 }
示例#6
0
  @Override
  public ClientResponse post(String url, Map<String, String> headerParameters, String input) {

    WebResource webResource = getClient().resource(url);
    if (headerParameters != null) {
      Set<String> keySet = headerParameters.keySet();

      Builder requestBuilder = webResource.getRequestBuilder();
      for (String key : keySet) {
        requestBuilder.header(key, headerParameters.get(key));
      }
    }

    ClientResponse response =
        webResource.type("application/json").post(ClientResponse.class, input);
    return response;
  }
 protected void deleteInternal(String root, String path, Map<String, String> headers) {
   try {
     WebResource webResource =
         getClient().resource(root).path(configuration.getVersion()).path(path);
     WebResource.Builder builder = webResource.getRequestBuilder();
     if (headers != null) {
       for (String key : headers.keySet()) {
         builder = builder.header(key, headers.get(key));
       }
     }
     String response = builder.delete(String.class);
     logger.fine(response);
   } catch (BaseSpaceException bs) {
     throw bs;
   } catch (Throwable t) {
     t.printStackTrace();
     throw new RuntimeException(t);
   }
 }
示例#8
0
 /**
  * TODO Documentation
  *
  * @param url the rest service URL to request
  * @return the resulting {@link ClientResponse}. If the request fails (HTTP response code NOT 200)
  *     <code>null</code> will be returned.
  */
 private ClientResponse request(final String url) {
   // Set the cookies
   if (loginCookies == null) {
     // TODO throw a real exception here
     throw new RuntimeException("Please login first");
   }
   // build the request
   final DefaultClientConfig cc = new DefaultClientConfig();
   final Client client = Client.create(cc);
   final WebResource resource = client.resource(url);
   final Builder builder = resource.getRequestBuilder();
   builder.accept(MediaType.APPLICATION_XML);
   for (Cookie cookie : loginCookies.getCookies()) {
     builder.cookie(cookie);
   }
   final ClientResponse response = builder.get(ClientResponse.class);
   if (response.getStatus() != 200) {
     LOG.warning("Request failed! HTTP response code: " + response.getStatus());
   }
   return response;
 }
 @Override
 public HttpResponse get(final URI uri, final Optional<Map<String, String>> additionalHeaders) {
   ClientResponse clientResponse = null;
   try {
     final WebResource webResource = queueProxyClient.resource(uri);
     WebResource.Builder builder = webResource.getRequestBuilder();
     if (additionalHeaders.isPresent()) {
       for (final Map.Entry<String, String> entry : additionalHeaders.get().entrySet()) {
         builder = builder.header(entry.getKey(), entry.getValue());
       }
     }
     clientResponse = builder.get(ClientResponse.class);
     return new HttpResponse(clientResponse.getStatus(), clientResponse.getEntity(String.class));
   } catch (ClientHandlerException ex) {
     throw new HttpClientException("Jersey client throwing exception.", ex);
   } finally {
     if (clientResponse != null) {
       clientResponse.close();
     }
   }
 }
  @SuppressWarnings("unchecked")
  @Override
  public <T extends ApiResponse<?, ?>> T putFile(
      Class<? extends ApiResponse<?, ?>> clazz,
      String path,
      Map<String, String> headers,
      InputStream file) {
    try {
      WebResource resource =
          getClient()
              .resource(
                  UriBuilder.fromUri(getConfiguration().getApiRootUri())
                      .path(getConfiguration().getVersion())
                      .path(path)
                      .build());

      WebResource.Builder builder = resource.getRequestBuilder();
      if (headers != null) {
        for (String key : headers.keySet()) {
          builder = builder.header(key, headers.get(key));
        }
      }
      builder =
          builder
              .type(MediaType.APPLICATION_OCTET_STREAM)
              .accept(MediaType.APPLICATION_JSON)
              .entity(file);

      String response = builder.put(String.class);
      logger.fine(response);
      return (T) TypeHelper.INSTANCE.getObjectMapper().readValue(response, clazz);
    } catch (BaseSpaceException bs) {
      throw bs;
    } catch (RuntimeException t) {
      throw t;
    } catch (Throwable t) {
      throw new RuntimeException(t);
    }
  }
 @Override
 protected Builder setResourceHeaders(WebResource resource) {
   return resource.getRequestBuilder();
 }
  /*
   * Send GET request to KittyHawk server, and handle redirect/cookies
   */
  private ClientResponse sendGetRequest(WebResource resource) throws VNXeException {
    _logger.info("getting data: {} ", _url);
    if (_client.isUnity() == true) {
      setFields();
    }
    ClientResponse response =
        buildRequest(addQueryParameters(buildResource(resource)).getRequestBuilder())
            .get(ClientResponse.class);
    Status statusCode = response.getClientResponseStatus();
    _logger.info(response.getStatus() + ":" + response.toString());
    if (statusCode == ClientResponse.Status.OK) {
      String emcCsrfToken = response.getHeaders().getFirst(EMC_CSRF_HEADER);
      if (emcCsrfToken != null) {
        saveEmcCsrfToken(emcCsrfToken);
      }

      saveClientCookies();
      return response;
    } else if (response.getClientResponseStatus() == ClientResponse.Status.UNAUTHORIZED) {
      authenticate();
      response =
          buildRequest(addQueryParameters(buildResource(resource)).getRequestBuilder())
              .get(ClientResponse.class);
      ;
    }
    int redirectTimes = 1;
    while (response.getClientResponseStatus() == ClientResponse.Status.FOUND
        && redirectTimes < VNXeConstants.REDIRECT_MAX) {

      String code = response.getClientResponseStatus().toString();
      String data = response.getEntity(String.class);
      _logger.debug("Returned code: {}, returned data:", code, data);
      WebResource newResource = handelRedirect(response);
      if (newResource != null) {
        response = buildRequest(newResource.getRequestBuilder()).get(ClientResponse.class);
        redirectTimes++;
      } else {
        // could not find the redirect url, return
        _logger.error(
            String.format(
                "The post request to: %s failed with: %s %s",
                _url,
                response.getClientResponseStatus().toString(),
                response.getEntity(String.class)));
        throw VNXeException.exceptions.unexpectedDataError(
            "Got redirect status code, but could not get redirected URL");
      }
    }
    if (redirectTimes >= VNXeConstants.REDIRECT_MAX) {
      _logger.error("redirected too many times for the request {}", _url);
      throw VNXeException.exceptions.unexpectedDataError(
          "Redirected too many times while sending the request for " + _url);
    }

    checkResponse(response, GET_REQUEST);

    List<NewCookie> cookies = response.getCookies();
    if (cookies != null && !cookies.isEmpty()) {
      _requestCookies.addAll(cookies);
    }
    saveClientCookies();

    String emcCsrfToken = response.getHeaders().getFirst(EMC_CSRF_HEADER);
    if (emcCsrfToken != null) {
      saveEmcCsrfToken(emcCsrfToken);
    }
    return response;
  }
  /*
   * Send POST request to KittyHawk server, and handle redirect/cookies
   *
   * @param resource webResource
   *
   * @param ParamBase parameters for post
   *
   * @throws VNXeException
   */
  public ClientResponse postRequest(ParamBase param) throws VNXeException {
    _logger.debug("post data: " + _url);
    ObjectMapper mapper = new ObjectMapper();
    String parmString = null;
    if (param != null) {
      try {
        parmString = mapper.writeValueAsString(param);
        _logger.debug("Content of the post: {}", parmString);
      } catch (JsonGenerationException e) {
        _logger.error("Post request param is not valid. ", e);
        throw VNXeException.exceptions.vnxeCommandFailed("Post request param is not valid.", e);
      } catch (JsonMappingException e) {
        _logger.error("Post request param is not valid. ", e);
        throw VNXeException.exceptions.vnxeCommandFailed("Post request param is not valid.", e);
      } catch (IOException e) {
        _logger.error("Post request param is not valid. ", e);
        throw VNXeException.exceptions.vnxeCommandFailed("Post request param is not valid.", e);
      }
    }
    ClientResponse response =
        buildRequest(addQueryParameters(buildResource(_resource)).getRequestBuilder())
            .entity(parmString)
            .post(ClientResponse.class);
    Status statusCode = response.getClientResponseStatus();
    if (statusCode == ClientResponse.Status.CREATED
        || statusCode == ClientResponse.Status.ACCEPTED
        || statusCode == ClientResponse.Status.OK
        || statusCode == ClientResponse.Status.NO_CONTENT) {
      return response;
    } else if (statusCode == ClientResponse.Status.UNAUTHORIZED) {
      authenticate();
      response =
          buildRequest(addQueryParameters(buildResource(_resource)).getRequestBuilder())
              .entity(parmString)
              .post(ClientResponse.class);
      ;
      statusCode = response.getClientResponseStatus();

      if (statusCode == ClientResponse.Status.OK
          || statusCode == ClientResponse.Status.ACCEPTED
          || statusCode == ClientResponse.Status.NO_CONTENT
          || statusCode == ClientResponse.Status.CREATED) {
        return response;
      }
    }
    int redirectTimes = 1;
    // handle redirect
    while (response.getClientResponseStatus() == ClientResponse.Status.FOUND
        && redirectTimes < VNXeConstants.REDIRECT_MAX) {

      String code = response.getClientResponseStatus().toString();
      String data = response.getEntity(String.class);
      _logger.debug("Returned code: {}, returned data {}", code, data);
      WebResource newResource = handelRedirect(response);
      if (newResource != null) {
        response =
            buildRequest(newResource.getRequestBuilder())
                .entity(parmString)
                .post(ClientResponse.class);
        redirectTimes++;
      } else {
        // could not find the redirect url, return
        _logger.error(
            String.format(
                "The post request to: %s failed with: %s %s",
                _url,
                response.getClientResponseStatus().toString(),
                response.getEntity(String.class)));
        throw VNXeException.exceptions.unexpectedDataError(
            "Got redirect status code, but could not get redirected URL");
      }
    }
    if (redirectTimes >= VNXeConstants.REDIRECT_MAX) {
      _logger.error("redirected too many times for the request {}", _url);
      throw VNXeException.exceptions.unexpectedDataError(
          "Redirected too many times while sending the request for " + _url);
    }
    checkResponse(response, POST_REQUEST);
    return response;
  }