-
Notifications
You must be signed in to change notification settings - Fork 970
Description
Describe the bug
When using a custom region (example, Region.of("custom") or Region.AWS_GLOBAL a NullPointerException is thrown when resolving a S3 Bucket endpoint. This impacts the use case of using the SDK to communicate with other S3 services where Region is ignored. Since Region is required in the S3ClientBuilder someone may want to do something like
S3Client.builder().region(Region.of("ignored")...
which was supported in previous versions of the SDK.
interesting enough this issue also exists if you are using Region.AWS_GLOBAL
Expected behavior
The expected behavior is that the NullPointerException is not thrown and requests are sucessful using custom regions.
Current behavior
NullPointerException is thrown
Caused by: java.lang.NullPointerException: null
at software.amazon.awssdk.services.s3.internal.endpoints.S3BucketEndpointResolver.resolveEndpoint(S3BucketEndpointResolver.java:72) ~[s3-2.17.83.jar:na]
at software.amazon.awssdk.services.s3.internal.endpoints.S3BucketEndpointResolver.applyEndpointConfiguration(S3BucketEndpointResolver.java:50) ~[s3-2.17.83.jar:na]
at software.amazon.awssdk.services.s3.internal.handlers.EndpointAddressInterceptor.modifyHttpRequest(EndpointAddressInterceptor.java:68) ~[s3-2.17.83.jar:na]
at software.amazon.awssdk.core.interceptor.ExecutionInterceptorChain.modifyHttpRequestAndHttpContent(ExecutionInterceptorChain.java:90) ~[sdk-core-2.17.83.jar:na]
at software.amazon.awssdk.core.internal.handler.BaseClientHandler.runModifyHttpRequestAndHttpContentInterceptors(BaseClientHandler.java:139) ~[sdk-core-2.17.83.jar:na]
at software.amazon.awssdk.core.internal.handler.BaseClientHandler.finalizeSdkHttpFullRequest(BaseClientHandler.java:77) ~[sdk-core-2.17.83.jar:na]
at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.doExecute(BaseSyncClientHandler.java:151) ~[sdk-core-2.17.83.jar:na]
at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.lambda$execute$1(BaseSyncClientHandler.java:82) ~[sdk-core-2.17.83.jar:na]
at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.measureApiCallSuccess(BaseSyncClientHandler.java:175) ~[sdk-core-2.17.83.jar:na]
at software.amazon.awssdk.core.internal.handler.BaseSyncClientHandler.execute(BaseSyncClientHandler.java:76) ~[sdk-core-2.17.83.jar:na]
at software.amazon.awssdk.core.client.handler.SdkSyncClientHandler.execute(SdkSyncClientHandler.java:45) ~[sdk-core-2.17.83.jar:na]
at software.amazon.awssdk.awscore.client.handler.AwsSyncClientHandler.execute(AwsSyncClientHandler.java:56) ~[aws-core-2.17.83.jar:na]
at software.amazon.awssdk.services.s3.DefaultS3Client.headBucket(DefaultS3Client.java:4901) ~[s3-2.17.83.jar:na]
Steps to Reproduce
Use a custom region when building S3Client and send a request.
final S3Client s3Client = S3Client.builder().
.region(Region.of("custom").build();
s3Client.headBucket(HeadBucketRequest.builder().bucket("myBucket").build());
Possible Solution
This seems to be the commit that caused the issue.
4656690#diff-e54f09e0d313a4de0a7e7590ad1dcd7a7d36a943aece2f74e2c41592f74dd081
A possible solution is to change this line
String dnsSuffixWithoutTagConsideration = RegionMetadata.of(context.region()).domain();
so that domain() is not called if the region meta data is null
Context
No response
AWS Java SDK version used
2.17.83
JDK version used
11.0.13
Operating System and version
Windows 7