in src/main/java/software/amazon/encryption/s3/S3EncryptionClient.java [190:235]
public PutObjectResponse putObject(PutObjectRequest putObjectRequest, RequestBody requestBody)
throws AwsServiceException, SdkClientException {
if (_enableMultipartPutObject) {
try {
CompleteMultipartUploadResponse completeResponse = multipartPutObject(putObjectRequest, requestBody);
PutObjectResponse response = PutObjectResponse.builder()
.eTag(completeResponse.eTag())
.build();
return response;
} catch (Throwable e) {
throw new S3EncryptionClientException("Exception while performing Multipart Upload PutObject", e);
}
}
PutEncryptedObjectPipeline pipeline = PutEncryptedObjectPipeline.builder()
.s3AsyncClient(_wrappedAsyncClient)
.cryptoMaterialsManager(_cryptoMaterialsManager)
.secureRandom(_secureRandom)
.build();
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
try {
CompletableFuture<PutObjectResponse> futurePut = pipeline.putObject(putObjectRequest,
AsyncRequestBody.fromInputStream(
requestBody.contentStreamProvider().newStream(),
requestBody.optionalContentLength().orElse(-1L),
singleThreadExecutor
)
);
PutObjectResponse response = futurePut.join();
singleThreadExecutor.shutdown();
return response;
} catch (CompletionException completionException) {
singleThreadExecutor.shutdownNow();
throw new S3EncryptionClientException(completionException.getMessage(), completionException.getCause());
} catch (Exception exception) {
singleThreadExecutor.shutdownNow();
throw new S3EncryptionClientException(exception.getMessage(), exception);
}
}