protected InputStream handleRequest(String url) {
    Request request = new RequestBuilder().setFollowRedirects(true).setUrl(url).build();

    try {
      final PipedOutputStream po = new PipedOutputStream();

      final PipedInputStream pi = new PipedInputStream(po);

      final BodyDeferringAsyncHandler bdah = new BodyDeferringAsyncHandler(po);

      Future<Response> f = ahcProvider.getAsyncHttpClient().executeRequest(request, bdah);

      BodyDeferringInputStream result = new BodyDeferringInputStream(f, bdah, pi);

      if (200 == result.getAsapResponse().getStatusCode()) {
        return result;
      } else {
        result.close();

        return null;
      }
    } catch (IOException e) {
      getLogger().debug("Error retrieving lvo data", e);
    } catch (InterruptedException e) {
      getLogger().debug("Error retrieving lvo data", e);
    }

    return null;
  }
  @Override
  public AbstractStorageItem retrieveItem(
      ProxyRepository repository, ResourceStoreRequest request, String baseUrl)
      throws ItemNotFoundException, RemoteStorageException {
    final URL remoteURL = getAbsoluteUrlFromBase(baseUrl, request.getRequestPath());

    final String itemUrl = remoteURL.toString();

    final AsyncHttpClient client = getClient(repository);

    try {

      BodyDeferringInputStream ris = AHCUtils.fetchContent(client, itemUrl);

      // this blocks until response headers arrived
      Response response = ris.getAsapResponse();

      // expected: 200 OK
      validateResponse(repository, request, "GET", itemUrl, response, 200);

      long length = AHCUtils.getContentLength(response, -1);

      long lastModified = AHCUtils.getLastModified(response, System.currentTimeMillis());

      // non-reusable simplest content locator, the ris InputStream is ready to be consumed
      PreparedContentLocator contentLocator =
          new PreparedContentLocator(ris, response.getContentType());

      DefaultStorageFileItem result =
          new DefaultStorageFileItem(
              repository, request, true /* canRead */, true /* canWrite */, contentLocator);

      result.setLength(length);

      result.setModified(lastModified);

      result.setCreated(result.getModified());

      result.setRemoteUrl(itemUrl);

      result.getItemContext().setParentContext(request.getRequestContext());

      return result;
    } catch (ItemNotFoundException e) {
      throw e;
    } catch (RemoteStorageException e) {
      throw e;
    } catch (Exception e) {
      throw new RemoteStorageException(e);
    }
  }