尝试使用Java SDK从S3 Bucket下载文件,isStandardEndpoint上出现空指针异常
我试图连接到S3 bucket并下载文件,但代码引发异常: 在我的代码中,我有尝试使用Java SDK从S3 Bucket下载文件,isStandardEndpoint上出现空指针异常,java,amazon-s3,endpoint,Java,Amazon S3,Endpoint,我试图连接到S3 bucket并下载文件,但代码引发异常: 在我的代码中,我有 ProfileCredentialsProvider pcp = new ProfileCredentialsProvider("assumed_role"); bucketName = "dev-data-extract-service-bucket"; s3Client = AmazonS3ClientBuilder.standard().withCredentials(pcp).withRegi
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异常:
fullObject = s3Client.getObject(new GetObjectRequest(bucketName, "TR09_20190205.detail"));
原因是端点中的主机值为null
这是来自AmazonS3Client类
private boolean isStandardEndpoint(URI endpoint) {
return endpoint.getHost().endsWith("s3.amazonaws.com");
}
下面是堆栈跟踪
[main]调试com.amazonaws.AmazonWebServiceClient-内部日志记录
已成功配置为commons logger:true 15:43:45.183[主]
调试com.amazonaws.metrics.AwsSdkMetrics-管理mbean已注册
在com.amazonaws.management下:type=AwsSdkMetrics 15:43:45.952[main]
调试com.amazonaws.monitoring.CsmConfigurationProviderChain-无法
从中加载配置
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连接收割机]
调试org.apache.http.impl.conn.poolighttpclientconnectionmanager-
关闭空闲连接超过60000毫秒15:43:45.952
[main]调试com.amazonaws.monitoring.CsmConfigurationProviderChain-
无法从加载配置
com.amazonaws.monitoring。ProfileCsmConfigurationProvider@611889f4:
无法加载线程“main”中的配置文件异常
位于的java.lang.NullPointerException
amazonaws.services.s3.AmazonS3Client.isStandardEndpoint(AmazonS3Client.java:3772)
在
amazonaws.services.s3.AmazonS3Client.noExplicitRegionProvided(AmazonS3Client.java:3767)
在
应访问com.amazonaws.services.s3.AmazonS3Client.bucketRegions(AmazonS3Client.java:4505)
在
com.amazonaws.services.s3.AmazonS3Client.shouldPerformanceHeadRequestToFindRegion(AmazonS3Client.java:4501)
在
amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4426)
在
amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4390)
在
amazonaws.services.s3.AmazonS3Client.getAcl(AmazonS3Client.java:3573)
在
com.amazonaws.services.s3.AmazonS3Client.getBucketAcl(AmazonS3Client.java:1186)
在
com.amazonaws.services.s3.AmazonS3Client.getBucketAcl(AmazonS3Client.java:1176)
在
amazonaws.services.s3.AmazonS3Client.doesBucketExistV2(AmazonS3Client.java:1312)
at.AWSHelper.downloadFromS3Bucket(AWSHelper.java:32)at
.AWSHelper.main(AWSHelper.java:59)
我认为你的问题源于你对该地区的定位方式。我认为该区域正在解析为null,这导致端点为null 而不是:
s3Client = AmazonS3ClientBuilder.standard().withCredentials(pcp).withRegion(Regions.US_EAST_1.toString()).build();
尝试:
Regions类不重写toString()方法,因此它不会返回区域名称,这是代码正常工作所必需的。Hi Nader。欢迎来到堆栈溢出。感谢您抽出时间提出一个书面清晰的问题。您好。非常感谢@redbirdo的及时回复和大力帮助,您完全正确。你的解决方案解决了这个问题,非常感谢你的帮助。但我很惊讶为什么AmazonSDK不处理这个问题,并抛出一个带有正确错误消息的异常。它只是抛出空指针异常
s3Client = AmazonS3ClientBuilder.standard().withCredentials(pcp).withRegion(Regions.US_EAST_1).build();