private AbortableInputStream toAbortableInputStream(HttpResponse apacheHttpResponse, HttpRequestBase apacheRequest) throws IOException { return AbortableInputStream.create(apacheHttpResponse.getEntity().getContent(), apacheRequest::abort); }
/** * Creates an instance of {@link AbortableInputStream}. * * @param delegate the delegated input stream * @param abortable the abortable * @return a new instance of AbortableInputStream */ public static AbortableInputStream create(InputStream delegate, Abortable abortable) { return new AbortableInputStream(delegate, abortable); }
private void closeStream(SdkHttpFullResponse response) { response.content().ifPresent(i -> { try { i.close(); } catch (IOException e) { log.warn(() -> "Error closing HTTP content.", e); } }); }
private void closeStream(SdkHttpFullResponse response) { response.content().ifPresent(i -> { try { i.close(); } catch (IOException e) { log.warn(() -> "Error closing HTTP content.", e); } }); }
private AbortableInputStream generateContent(String protocol) { String content; switch (protocol) { case "xml": content = "<foo></foo>"; break; default: case "json": content = "{}"; } return AbortableInputStream.create(new ByteArrayInputStream(content.getBytes())); } }
/** * Creates an instance of {@link AbortableInputStream} that ignores abort. * * @param delegate the delegated input stream * @return a new instance of AbortableInputStream */ public static AbortableInputStream create(InputStream delegate) { if (delegate instanceof Abortable) { return new AbortableInputStream(delegate, (Abortable) delegate); } return new AbortableInputStream(delegate, () -> { }); }
@Override public T handle(SdkHttpFullResponse response, ExecutionAttributes executionAttributes) throws Exception { try { return unmarshallResponse(response); } finally { response.content().ifPresent(i -> { try { i.close(); } catch (IOException e) { log.warn(() -> "Error closing HTTP content.", e); } }); } }
private static AbortableInputStream crc32Validating(AbortableInputStream source, long expectedChecksum) { return AbortableInputStream.create(new Crc32ChecksumValidatingInputStream(source, expectedChecksum), source); }
/** * Creates an instance of {@link AbortableInputStream}. * * @param delegate the delegated input stream * @param abortable the abortable * @return a new instance of AbortableInputStream */ public static AbortableInputStream create(InputStream delegate, Abortable abortable) { return new AbortableInputStream(delegate, abortable); }
@Override public T handle(SdkHttpFullResponse response, ExecutionAttributes executionAttributes) throws Exception { try { return unmarshallResponse(response); } finally { response.content().ifPresent(i -> { try { i.close(); } catch (IOException e) { log.warn(() -> "Error closing HTTP content.", e); } }); } }
private static AbortableInputStream decompressing(AbortableInputStream source) { return AbortableInputStream.create(invokeSafely(() -> new GZIPInputStream(source)), source); } }
/** * Creates an instance of {@link AbortableInputStream} that ignores abort. * * @param delegate the delegated input stream * @return a new instance of AbortableInputStream */ public static AbortableInputStream create(InputStream delegate) { if (delegate instanceof Abortable) { return new AbortableInputStream(delegate, (Abortable) delegate); } return new AbortableInputStream(delegate, () -> { }); }
@Override public CompletableFuture<T> prepare() { streamFuture = new CompletableFuture<>(); return streamFuture.thenCompose(baos -> { ByteArrayInputStream content = new ByteArrayInputStream(baos.toByteArray()); // Ignore aborts - we already have all of the content. AbortableInputStream abortableContent = AbortableInputStream.create(content); httpResponse.content(abortableContent); try { return CompletableFuture.completedFuture(responseHandler.handle(crc32Validator .apply(httpResponse.build()), executionAttributes)); } catch (Exception e) { return CompletableFutureUtils.failedFuture(e); } }); }
private AbortableInputStream toAbortableInputStream(HttpResponse apacheHttpResponse, HttpRequestBase apacheRequest) throws IOException { return new AbortableInputStream(apacheHttpResponse.getEntity().getContent(), apacheRequest::abort); }
/** * Transforms an event stream message into a {@link SdkHttpFullResponse} so we can reuse our existing generated unmarshallers. * * @param message Message to transform. */ private SdkHttpFullResponse adaptMessageToResponse(Message message, boolean isException) { Map<String, List<String>> headers = message.getHeaders() .entrySet() .stream() .collect(HashMap::new, (m, e) -> m.put(e.getKey(), singletonList(e.getValue().getString())), Map::putAll); if (requestId != null) { headers.put(X_AMZN_REQUEST_ID_HEADER, singletonList(requestId)); } SdkHttpFullResponse.Builder builder = SdkHttpFullResponse.builder() .content(AbortableInputStream.create(new ByteArrayInputStream(message.getPayload()))) .headers(headers); if (!isException) { builder.statusCode(200); } return builder.build(); }
private SdkHttpFullResponse fullResponse(TestItemUnmarshalling item) { AbortableInputStream abortableInputStream = AbortableInputStream.create(new ByteArrayInputStream(item.utf8())); return SdkHttpFullResponse.builder() .statusCode(200) .content(abortableInputStream) .build(); }
@Override public Optional<InputStream> modifyHttpResponseContent(Context.ModifyHttpResponse context, ExecutionAttributes executionAttributes) { if (context.request() instanceof GetBucketPolicyRequest) { String policy = context.responseBody() == null ? null : invokeSafely( () -> IoUtils.toUtf8String(context.responseBody().get())); // Wrap in CDATA to deal with any escaping issues String xml = String.format("<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<Policy><![CDATA[%s]]></Policy>", policy); return Optional.of(AbortableInputStream.create(new StringInputStream(xml))); } return context.responseBody(); } }
@Override public HttpExecuteResponse call() throws IOException { connection.connect(); request.contentStreamProvider().ifPresent(provider -> invokeSafely(() -> IoUtils.copy(provider.newStream(), connection.getOutputStream()))); int responseCode = connection.getResponseCode(); boolean isErrorResponse = HttpStatusFamily.of(responseCode).isOneOf(CLIENT_ERROR, SERVER_ERROR); InputStream content = !isErrorResponse ? connection.getInputStream() : connection.getErrorStream(); AbortableInputStream responseBody = content != null ? AbortableInputStream.create(content) : null; return HttpExecuteResponse.builder() .response(SdkHttpResponse.builder() .statusCode(responseCode) .statusText(connection.getResponseMessage()) // TODO: Don't ignore abort? .headers(extractHeaders(connection)) .build()) .responseBody(responseBody) .build(); }
response = response.toBuilder().content(AbortableInputStream.create(interceptorContext.responseBody().get())).build();