code: protected <T> T doGet(String path, Class<T> cls, MultivaluedMap<String, String> headers) throws ClientException {
          this.readLock.lock();
          try {
              WebResource.Builder requestBuilder = getResourceWrapper().rewritten(path, HttpMethod.GET).getRequestBuilder();
              requestBuilder = ensureJsonHeaders(headers, requestBuilder, false, true);
              ClientResponse response = requestBuilder.get(ClientResponse.class);
              errorIfStatusNotEqualTo(response, ClientResponse.Status.OK);
              return response.getEntity(cls);
          } catch (ClientHandlerException ex) {
              throw new ClientException(ClientResponse.Status.INTERNAL_SERVER_ERROR, ex.getMessage());
          } finally {
              this.readLock.unlock();
          }
      }
docs: Gets the resource specified by the path.
  
  @param <T> the type of the resource.
  @param path the path to the resource. Cannot be <code>null</code>.
  @param cls the type of the resource. Cannot be <code>null</code>.
  @param headers any headers. if no Accepts header is provided, an Accepts
  header for JSON will be added.
  
  @return the resource.
  
  @throws ClientException if a status code other than 200 (OK) is returned.