Skip to content

NullPointerException when using custom Region or AWS_GLOBAL in S3Client #2885

@matthew-js-porter

Description

@matthew-js-porter

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugThis issue is a bug.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions