S3AsyncClient 对每个区域端点抛出 java.lang.NullPointerException?

S3AsyncClient throws java.lang.NullPointerException with every region endpoint?

我正在尝试将文件上传到 ap-southeast-1 区域中的 AWS 存储桶,凭据已经过验证并且是正确的。

S3AsyncClientBuilder 为每个区域端点抛出空指针异常。 (https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region)

github 的相关线程在签署区域时遇到问题,但这不是问题,一旦指定了适当的区域。

https://github.com/aws/aws-sdk-java-v2/issues/448

这是访问 AWS Bucket 的 class,为清楚起见,该行已被注释。

public class ObjectUploaderInterfaceImpl implements ObjectUploaderInterface {


  private String AWS_ACCESS_KEY;
  private String AWS_SECRET_KEY;
  private S3AsyncClient s3Client; // Asynchronous Client for Non Blocking IO
  private AwsCredentialsProvider credentials;

  public ObjectUploaderInterfaceImpl(String awsAccessKey, String awsSecretKey) {
    this.AWS_ACCESS_KEY = awsAccessKey;
    this.AWS_SECRET_KEY = awsSecretKey;
    this.credentials = new StaticCredentialsProvider(
        new AwsCredentials(this.AWS_ACCESS_KEY, this.AWS_SECRET_KEY));
    try {
      this.s3Client = S3AsyncClient.builder()
          .credentialsProvider(this.credentials)
          .region(Region.AP_SOUTHEAST_1)
          .endpointOverride(new URI("s3-ap-southeast-1.amazonaws.com"))
          .build(); // Throws Null pointer Exception
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  @Override
  public CompletableFuture<PutObjectResponse> uploadObject(String filePath, String s3Bucket,
      String s3BucketPath) {
    CompletableFuture<PutObjectResponse> future;
    try {
      future = s3Client.putObject(
          PutObjectRequest.builder()
              .bucket(s3Bucket)
              .key(s3BucketPath)
              .build(),
          AsyncRequestProvider.fromFile(Paths.get(filePath))
      );
      future.whenComplete((resp, err) -> {
        if (resp != null) {
          System.out.println("Response from Server : " + resp);
        } else {
          err.printStackTrace();
        }
        try {
          s3Client.close();
        } catch (Exception e) {
          System.out.println(e);
        }

      });
    } catch (Exception e) {
      System.out.println(e.getMessage());
      return null;
    }
    return future;

  }
}

Exception Stack如下

    java.lang.NullPointerException
        at software.amazon.awssdk.config.ImmutableClientConfiguration.lambda$schemeToProtocol(ImmutableClientConfiguration.java:141)
        at java.util.stream.ReferencePipeline.accept(ReferencePipeline.java:174)
        at java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:958)
        at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
        at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498)
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)
        at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
        at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)
        at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:464)
        at software.amazon.awssdk.config.ImmutableClientConfiguration.schemeToProtocol(ImmutableClientConfiguration.java:141)
        at software.amazon.awssdk.config.ImmutableClientConfiguration.initializeLegacyConfiguration(ImmutableClientConfiguration.java:110)
        at software.amazon.awssdk.config.ImmutableClientConfiguration.<init>(ImmutableClientConfiguration.java:48)
        at software.amazon.awssdk.config.ImmutableAsyncClientConfiguration.<init>(ImmutableAsyncClientConfiguration.java:42)
        at software.amazon.awssdk.client.builder.DefaultClientBuilder.asyncClientConfiguration(DefaultClientBuilder.java:216)
        at software.amazon.awssdk.services.s3.DefaultS3AsyncClientBuilder.buildClient(DefaultS3AsyncClientBuilder.java:28)
        at software.amazon.awssdk.services.s3.DefaultS3AsyncClientBuilder.buildClient(DefaultS3AsyncClientBuilder.java:22)
        at software.amazon.awssdk.client.builder.DefaultClientBuilder.build(DefaultClientBuilder.java:110)
        at services.storage.Implementation.ObjectUploaderInterfaceImpl.<init>(ObjectUploaderInterfaceImpl.java:41)
        at services.storage.ObjectUploaderInterfaceTest.<init>(ObjectUploaderInterfaceTest.java:12)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
null
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
[error] Test services.storage.ObjectUploaderInterfaceTest.uploadTest failed: java.lang.NullPointerException: null, took 0.008 sec
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

我不确定是什么原因导致的,自 AWS-SDK 2.0 最近发布以来,文档中提供了一些参考资料。

我们需要提供 https 以防止在请求上出现签名问题

https://s3-ap-southeast-1.amazonaws.com

已修复