@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); } }