繁体   English   中英

尝试使用Java SDK从S3存储桶下载文件,isStandardEndpoint上的空指针异常

[英]Trying to download files from S3 Bucket using Java SDK, Null pointer Exception on isStandardEndpoint

我正在尝试连接到S3存储桶并下载文件,但是代码抛出异常:

在我的代码中

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"));

原因是来自AmazonS3Client类的Endpoint中的主机值为null

private boolean isStandardEndpoint(URI endpoint) {
        return endpoint.getHost().endsWith("s3.amazonaws.com");
}

接下来是堆栈跟踪

[main] DEBUG com.amazonaws.AmazonWebServiceClient-内部日志记录已成功配置为commons记录器:true 15:43:45.183 [main] DEBUG com.amazonaws.metrics.AwsSdkMetrics-在com.amazonaws.management:type=AwsSdkMetrics 15下注册的管理员mbean :43:45.952 [main]调试com.amazonaws.monitoring.CsmConfigurationProviderChain-无法从com.amazonaws.monitoring.EnvironmentVariableCsmConfigurationProvider@169e6180加载配置:无法从环境变量加载客户端监视配置! 15:43:45.952 [main]调试com.amazonaws.monitoring.CsmConfigurationProviderChain-无法从com.amazonaws.monitoring.SystemPropertyCsmConfigurationProvider@35aea049加载配置:无法从系统属性变量加载客户端监视配置! 15:43:45.952 [java-sdk-http-connection-reaper]调试org.apache.http.impl.conn.PoolingHttpClientConnectionManager-关闭空闲时间超过60000的连接MILLISECONDS 15:43:45.952 [main]调试com.amazonaws.monitoring .CsmConfigurationProviderChain-无法从com.amazonaws.monitoring.ProfileCsmConfigurationProvider@611889f4加载配置:无法在com.amazonaws.services.s3的线程“ main” java.lang.NullPointerException中加载配置文件异常。AmazonS3Client.isStandardEndpoint(AmazonS3Client.java :3772),位于com.amazonaws.services.s3.AmazonS3Client.noExplicitRegionProvided(AmazonS3Client.java:3767),位于com.amazonaws.services.s3.AmazonS3Client.bucketRegionShouldBeCached(AmazonS3Client.java:4505),位于com.amazonaws.services。 com.amazonaws.services.s3上的AmazonS3Client.shouldPerformHeadRequestToFindRegion(AmazonS3Client.java:4501)。com.amazonaws.services.s3上的AmazonS3Client.invoke(AmazonS3Client.java:4426).Amazon上的AmazonS3Client.invoke(AmazonS3Client.java:4390) .amazonaws。 com.amazonaws.services.s3上的services.s3.AmazonS3Client.getAcl(AmazonS3Client.java:3573)com.amazonaws.services.s3.AmazonS3Client.getBucketAcl(AmazonS3Client.java:AmazonS3Client.getBucketAcl(AmazonS3Client.java:1186) 1176),位于com.amazonaws.services.s3.AmazonS3Client.doesBucketExistV2(AmazonS3Client.java:1312),位于.AWSHelper.downloadFromS3Bucket(AWSHelper.java:32),位于.AWSHelper.main(AWSHelper.java:59)

我认为您的问题源于您设定区域的方式。 我认为该区域解析为null,这导致您的端点为null。

代替:

s3Client = AmazonS3ClientBuilder.standard().withCredentials(pcp).withRegion(Regions.US_EAST_1.toString()).build();

尝试:

s3Client = AmazonS3ClientBuilder.standard().withCredentials(pcp).withRegion(Regions.US_EAST_1).build();

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM