protected InputStream getBinaryRequestPayloadStream(ContentStreamProvider streamProvider) { try { if (streamProvider == null) { return new ByteArrayInputStream(new byte[0]); } return streamProvider.newStream(); } catch (SdkClientException e) { throw e; } catch (Exception e) { throw SdkClientException.builder() .message("Unable to read request payload to sign request: " + e.getMessage()) .cause(e) .build(); } }
protected InputStream getBinaryRequestPayloadStream(ContentStreamProvider streamProvider) { try { if (streamProvider == null) { return new ByteArrayInputStream(new byte[0]); } return streamProvider.newStream(); } catch (SdkClientException e) { throw e; } catch (Exception e) { throw SdkClientException.builder() .message("Unable to read request payload to sign request: " + e.getMessage()) .cause(e) .build(); } }
/** * Read the content of the request to get the length of the stream. */ private static long getContentLength(SdkHttpFullRequest.Builder requestBuilder) throws IOException { InputStream content = requestBuilder.contentStreamProvider().newStream(); long contentLength = 0; byte[] tmp = new byte[4096]; int read; while ((read = content.read(tmp)) != -1) { contentLength += read; } return contentLength; } }
/** * Read the content of the request to get the length of the stream. */ private static long getContentLength(SdkHttpFullRequest.Builder requestBuilder) throws IOException { InputStream content = requestBuilder.contentStreamProvider().newStream(); long contentLength = 0; byte[] tmp = new byte[4096]; int read; while ((read = content.read(tmp)) != -1) { contentLength += read; } return contentLength; } }
public SimpleHttpContentPublisher(SdkHttpFullRequest request) { this.content = request.contentStreamProvider().map(p -> invokeSafely(() -> IoUtils.toByteArray(p.newStream()))) .orElseGet(() -> new byte[0]); this.length = content.length; }
private static ContentStreamProvider createManagedStream(ContentStreamProvider contentStreamProvider) { return () -> ReleasableInputStream.wrap(contentStreamProvider.newStream()).disableClose(); }
private static byte[] toUtf8ByteArray(Map<String, AttributeValue> item) { SdkHttpFullRequest marshalled = putItemRequestMarshaller().marshall(PutItemRequest.builder().item(item).build()); InputStream content = marshalled.contentStreamProvider().get().newStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buff = new byte[8192]; int read; try { while ((read = content.read(buff)) != -1) { baos.write(buff, 0, read); } } catch (IOException ioe) { throw new UncheckedIOException(ioe); } return baos.toByteArray(); }
/** * Encodes the request into a flow message and then returns bytebuffer from the message. * * @param request The request to encode * @return A bytebuffer representing the given request */ public static ByteBuffer encodeEventStreamRequestToByteBuffer(SdkHttpFullRequest request) { Map<String, HeaderValue> headers = request.headers() .entrySet() .stream() .collect(Collectors.toMap(Map.Entry::getKey, e -> HeaderValue.fromString( firstIfPresent(e.getValue())))); byte[] payload = null; if (request.contentStreamProvider().isPresent()) { try { payload = IoUtils.toByteArray(request.contentStreamProvider().get().newStream()); } catch (IOException e) { throw new UncheckedIOException(e); } } return new Message(headers, payload).toByteBuffer(); }
@Override public Optional<RequestBody> modifyHttpContent(Context.ModifyHttpRequest context, ExecutionAttributes executionAttributes) { if (!BLACKLIST_METHODS.contains(context.request().getClass()) && context.requestBody().isPresent() && !context.httpRequest().firstMatchingHeader(CONTENT_MD5).isPresent()) { try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); IoUtils.copy(context.requestBody().get().contentStreamProvider().newStream(), baos); executionAttributes.putAttribute(CONTENT_MD5_ATTRIBUTE, Md5Utils.md5AsBase64(baos.toByteArray())); return context.requestBody(); } catch (IOException e) { throw new UncheckedIOException(e); } } return context.requestBody(); }
@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(); }
@Override public Optional<RequestBody> modifyHttpContent(Context.ModifyHttpRequest context, ExecutionAttributes executionAttributes) { if (putObjectChecksumEnabled(context.request(), SYNC, executionAttributes, context.httpRequest()) && context.requestBody().isPresent()) { SdkChecksum checksum = new Md5Checksum(); ChecksumCalculatingInputStream is = new ChecksumCalculatingInputStream(context.requestBody() .get() .contentStreamProvider() .newStream(), checksum); executionAttributes.putAttribute(CHECKSUM, checksum); return Optional.of(RequestBody.fromContentProvider(() -> is, context.requestBody().get().contentLength(), context.requestBody().get().contentType())); } return context.requestBody(); }
/** * If necessary, creates a chunk-encoding wrapper on the request payload. */ @Override protected void processRequestPayload(SdkHttpFullRequest.Builder mutableRequest, byte[] signature, byte[] signingKey, Aws4SignerRequestParams signerRequestParams, AwsS3V4SignerParams signerParams) { if (useChunkEncoding(mutableRequest, signerParams)) { if (mutableRequest.contentStreamProvider() != null) { ContentStreamProvider streamProvider = mutableRequest.contentStreamProvider(); mutableRequest.contentStreamProvider(() -> AwsS3V4Signer.this.asChunkEncodedStream( streamProvider.newStream(), signature, signingKey, signerRequestParams )); } } }
/** * If necessary, creates a chunk-encoding wrapper on the request payload. */ @Override protected void processRequestPayload(SdkHttpFullRequest.Builder mutableRequest, byte[] signature, byte[] signingKey, Aws4SignerRequestParams signerRequestParams, AwsS3V4SignerParams signerParams) { if (useChunkEncoding(mutableRequest, signerParams)) { if (mutableRequest.contentStreamProvider() != null) { ContentStreamProvider streamProvider = mutableRequest.contentStreamProvider(); mutableRequest.contentStreamProvider(() -> AwsS3V4Signer.this.asChunkEncodedStream( streamProvider.newStream(), signature, signingKey, signerRequestParams )); } } }
@Override public PutObjectResponse putObject(final PutObjectRequest putObjectRequest, final RequestBody requestBody) throws S3Exception { try { bucketsWithContents.get(putObjectRequest.bucket()).put(putObjectRequest.key(), bucketItemBuilder() .withName(putObjectRequest.key()) .withData(toByteArray(requestBody.contentStreamProvider().newStream())) .withLastModifiedNow() .build()); return PutObjectResponse.builder().build(); } catch (IOException e) { throw new RuntimeException(e); } }