I am trying to use AWS S3AsyncClient to get/read file from Object Storage. My ultimate intention is to use this in my Vert.x project but before using with Vert.x I wanted to do get it working standalone. By following multiple forums I have written below code but it is giving error "software.amazon.awssdk.core.exception.SdkClientException: Credentials must not be null.". Even though I am providing credentials here, it says it's not getting them. Can anyone please help me here?
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.file.Paths;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials;
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
import software.amazon.awssdk.core.async.AsyncResponseTransformer;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3AsyncClient;
import software.amazon.awssdk.services.s3.model.GetObjectRequest;
import software.amazon.awssdk.services.s3.model.GetObjectResponse;
public class S3AsyncStreamOps {
public static void main(String[] args) {
AwsCredentialsProvider creds = StaticCredentialsProvider.create(AwsBasicCredentials.create("my_access_key", "my_secret_key"));
S3AsyncClient s3Client;
try {
s3Client = S3AsyncClient.builder().credentialsProvider(creds)
.region(Region.US_WEST_1)
.endpointOverride(new URI("https://someobjectstorage.server.com:9021"))
.build();
CompletableFuture<GetObjectResponse> futureGet = s3Client.getObject(
GetObjectRequest.builder()
.bucket("my_bucket_name")
.key("/somepath/anotherpath/myData.pdf")
.build(),
AsyncResponseTransformer.toFile(Paths.get("/osfile/myfile.pdf")));
futureGet.get();
} catch (URISyntaxException e1) {
e1.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
With above code I am getting exception stack trace as:
java.util.concurrent.ExecutionException: software.amazon.awssdk.core.exception.SdkClientException: Credentials must not be null.
at java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357)
at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1895)
at com.aexp.ecp.vertx.spring.verticles.S3AsyncStreamOps.main(S3AsyncStreamOps.java:54)
Caused by: software.amazon.awssdk.core.exception.SdkClientException: Credentials must not be null.
at software.amazon.awssdk.core.exception.SdkClientException$BuilderImpl.build(SdkClientException.java:97)
at software.amazon.awssdk.core.internal.util.ThrowableUtils.asSdkException(ThrowableUtils.java:98)
at software.amazon.awssdk.core.internal.http.AmazonAsyncHttpClient$RequestExecutionBuilderImpl.execute(AmazonAsyncHttpClient.java:193)
at software.amazon.awssdk.core.internal.handler.BaseAsyncClientHandler.invoke(BaseAsyncClientHandler.java:263)
at software.amazon.awssdk.core.internal.handler.BaseAsyncClientHandler.doExecute(BaseAsyncClientHandler.java:205)
at software.amazon.awssdk.core.internal.handler.BaseAsyncClientHandler.execute(BaseAsyncClientHandler.java:134)
at software.amazon.awssdk.awscore.client.handler.AwsAsyncClientHandler.execute(AwsAsyncClientHandler.java:58)
at software.amazon.awssdk.services.s3.DefaultS3AsyncClient.getObject(DefaultS3AsyncClient.java:3949)
at com.aexp.ecp.vertx.spring.verticles.S3AsyncStreamOps.main(S3AsyncStreamOps.java:32)
Caused by: java.lang.NullPointerException: Credentials must not be null.
at software.amazon.awssdk.utils.Validate.paramNotNull(Validate.java:117)
at software.amazon.awssdk.auth.signer.params.Aws4SignerParams.<init>(Aws4SignerParams.java:42)
at software.amazon.awssdk.auth.signer.params.AwsS3V4SignerParams.<init>(AwsS3V4SignerParams.java:27)
at software.amazon.awssdk.auth.signer.params.AwsS3V4SignerParams.<init>(AwsS3V4SignerParams.java:21)
at software.amazon.awssdk.auth.signer.params.AwsS3V4SignerParams$BuilderImpl.build(AwsS3V4SignerParams.java:121)
at software.amazon.awssdk.auth.signer.AwsS3V4Signer.constructAwsS3SignerParams(AwsS3V4Signer.java:93)
at software.amazon.awssdk.auth.signer.AwsS3V4Signer.sign(AwsS3V4Signer.java:59)
at software.amazon.awssdk.core.internal.http.pipeline.stages.SigningStage.signRequest(SigningStage.java:63)
at software.amazon.awssdk.core.internal.http.pipeline.stages.SigningStage.execute(SigningStage.java:49)
at software.amazon.awssdk.core.internal.http.pipeline.stages.SigningStage.execute(SigningStage.java:35)
at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
at software.amazon.awssdk.core.internal.http.pipeline.stages.AsyncRetryableStage$RetryExecutor.doExecute(AsyncRetryableStage.java:208)
at software.amazon.awssdk.core.internal.http.pipeline.stages.AsyncRetryableStage$RetryExecutor.execute(AsyncRetryableStage.java:107)
at software.amazon.awssdk.core.internal.http.pipeline.stages.AsyncRetryableStage$RetryExecutor.execute(AsyncRetryableStage.java:102)
at software.amazon.awssdk.core.internal.http.pipeline.stages.AsyncRetryableStage.execute(AsyncRetryableStage.java:78)
at software.amazon.awssdk.core.internal.http.pipeline.stages.AsyncRetryableStage.execute(AsyncRetryableStage.java:51)
at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
at software.amazon.awssdk.core.internal.http.pipeline.stages.AsyncExecutionFailureExceptionReportingStage.execute(AsyncExecutionFailureExceptionReportingStage.java:41)
at software.amazon.awssdk.core.internal.http.pipeline.stages.AsyncExecutionFailureExceptionReportingStage.execute(AsyncExecutionFailureExceptionReportingStage.java:29)
at software.amazon.awssdk.core.internal.http.pipeline.stages.AsyncApiCallTimeoutTrackingStage.execute(AsyncApiCallTimeoutTrackingStage.java:64)
at software.amazon.awssdk.core.internal.http.pipeline.stages.AsyncApiCallTimeoutTrackingStage.execute(AsyncApiCallTimeoutTrackingStage.java:36)
at software.amazon.awssdk.core.internal.http.pipeline.RequestPipelineBuilder$ComposingRequestPipelineStage.execute(RequestPipelineBuilder.java:206)
at software.amazon.awssdk.core.internal.http.AmazonAsyncHttpClient$RequestExecutionBuilderImpl.execute(AmazonAsyncHttpClient.java:191)
... 6 more
I fixed this finally. It was a dependency issue between aws-sdk-java 2.10.56 and my previous sync aws-java-sdk-bundle 1.11.368. I created a separate project with only aws-sdk-java 2.10.56 and it started working properly. Able to read file from Object Storage and save on local system now.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With