首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试使用Java从S3桶下载文件,isStandardEndpoint上的Null指针异常

尝试使用Java从S3桶下载文件,isStandardEndpoint上的Null指针异常
EN

Stack Overflow用户
提问于 2019-02-07 23:04:14
回答 1查看 3.2K关注 0票数 3

我试图连接到S3桶并下载文件,但是代码会抛出异常:

在我的代码里

代码语言:javascript
复制
ProfileCredentialsProvider pcp = new ProfileCredentialsProvider("assumed_role");
        bucketName = "dev-data-extract-service-bucket";
s3Client = AmazonS3ClientBuilder.standard().withCredentials(pcp).withRegion(Regions.US_EAST_1.toString()).build();

调用以下行时会得到NullPointerException异常:

代码语言:javascript
复制
fullObject = s3Client.getObject(new GetObjectRequest(bucketName, "TR09_20190205.detail"));

原因是端点中的主机值为空,这是来自AmazonS3Client类的

代码语言:javascript
复制
private boolean isStandardEndpoint(URI endpoint) {
        return endpoint.getHost().endsWith("s3.amazonaws.com");
}

下面是堆栈跟踪

主调试com.amazonaws.monitoring.CsmConfigurationProviderChain -内部日志记录成功配置为公用记录器:真15:43:45.183主调试com.amazonaws.metrics.AwsSdkMetrics -在com.amazonaws.management:type=AwsSdkMetrics 15:43:45.952主调试com.amazonaws.monitoring.CsmConfigurationProviderChain下注册的管理mbean无法从com.amazonaws.monitoring.EnvironmentVariableCsmConfigurationProvider@169e6180:加载配置无法从环境变量加载客户端监视配置!15:43:45.952主调试com.amazonaws.monitoring.CsmConfigurationProviderChain-无法从com.amazonaws.monitoring.SystemPropertyCsmConfigurationProvider@35aea049:无法从系统属性变量加载客户端监视配置!15:43:45.952 java-sdk-http-连接--关闭空闲连接超过60000毫秒15:43:45.952主调试com.amazonaws.monitoring.CsmConfigurationProviderChain -无法从com.amazonaws.monitoring.ProfileCsmConfigurationProvider@611889f4:加载配置,无法在com的“主”java.lang.NullPointerException线程中加载配置文件异常.amazonaws.services.s3.AmazonS3Client.isStandardEndpoint(AmazonS3Client.java:3772) at com.amazonaws.services.s3.AmazonS3Client.noExplicitRegionProvided(AmazonS3Client.java:3767) at com.amazonaws.services.s3.AmazonS3Client.bucketRegionShouldBeCached(AmazonS3Client.java:4505) at com.amazonaws.services.s3.AmazonS3Client.shouldPerformHeadRequestToFindRegion(AmazonS3Client.java:4501) at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4426) at com.amazonaws.services.s3.AmazonS3Client.invoke( com.amazonaws.services.s3.AmazonS3Client.getAcl(AmazonS3Client.java:3573) at com.amazonaws.services.s3.AmazonS3Client.getBucketAcl(AmazonS3Client.java:1186) at com.amazonaws.services.s3.AmazonS3Client.getBucketAcl(AmazonS3Client.java:1176) at com.amazonaws.services.s3.AmazonS3Client.doesBucketExistV2(AmazonS3Client.java:1312) at .AWSHelper.downloadFromS3Bucket(AWSHelper.java:32) at .AWSHelper.main(AWSHelper.java:59) )

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-08 11:13:43

我认为你的问题源于你在这个地区的设置方式。我认为该区域正在解析为null,这导致您的端点为null。

而不是:

代码语言:javascript
复制
s3Client = AmazonS3ClientBuilder.standard().withCredentials(pcp).withRegion(Regions.US_EAST_1.toString()).build();

尝试:

代码语言:javascript
复制
s3Client = AmazonS3ClientBuilder.standard().withCredentials(pcp).withRegion(Regions.US_EAST_1).build();

Regions类不覆盖toString()方法,因此它不会返回区域名称,这是代码正常工作所需要的。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54583690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档