AWS TextractClientBuilder调用withCredentials方法未定义错误求助
AWS S3调用Textract凭证报错解决方案
核心报错原因
你在代码中混合使用了AWS SDK for Java 1.x和2.x两套不兼容的凭证体系:
- S3客户端使用的是1.x版本的
com.amazonaws.auth.BasicAWSCredentials、com.amazonaws.auth.AWSStaticCredentialsProvider凭证类 - Textract客户端使用的是2.x版本的
software.amazon.awssdk.services.textract.TextractClient,无法识别1.x的凭证类,且2.x客户端不存在withCredentials方法,这就是你标注行报错的直接原因。
代码修改方案
1. 新增2.x凭证相关导入
在app.java的导入部分添加如下内容:
import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;
2. 修正main方法中的凭证与客户端构建逻辑
将main方法中对应的代码段替换为以下内容:
public static void main(String[] args) { // 1.x版本凭证,供S3客户端使用 BasicAWSCredentials v1Creds = new BasicAWSCredentials("你的实际Access Key", "你的实际Secret Key"); AmazonS3 s3client = AmazonS3Client.builder() .withRegion("ap-southeast-1") .withCredentials(new AWSStaticCredentialsProvider(v1Creds)) .build(); S3Object s3Object = s3client.getObject("你的存储桶名称", "你的图片文件名.jpg"); S3ObjectInputStream s3ObjectInputStream = s3Object.getObjectContent(); SdkBytes bytes = SdkBytes.fromInputStream(s3ObjectInputStream); Document doc = Document.builder().bytes(bytes).build(); List<FeatureType> list = new ArrayList<>(); list.add(FeatureType.FORMS); AnalyzeDocumentRequest request = AnalyzeDocumentRequest.builder().featureTypes(list).document(doc).build(); // 2.x版本凭证,供Textract客户端使用,修正构建方法 AwsBasicCredentials v2Creds = AwsBasicCredentials.create("你的实际Access Key", "你的实际Secret Key"); TextractClient textractClient = TextractClient.builder() .region(Region.AP_SOUTHEAST_1) .credentialsProvider(StaticCredentialsProvider.create(v2Creds)) .build(); // 后续原有逻辑保持不变 AnalyzeDocumentResponse response = textractClient.analyzeDocument(request); // ... 原有剩余代码 }
pom.xml优化(解决版本冲突)
你当前pom存在版本冲突和冗余依赖问题,建议做如下调整:
- 已导入1.x版本的BOM依赖管理,所有1.x系列依赖不需要单独标注版本号
- 你使用的是2.x版本的Textract客户端,可直接删除冗余的1.x Textract依赖
修改后的依赖部分示例:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>textract</artifactId> <version>2.15.61</version> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-s3</artifactId> </dependency> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-core</artifactId> </dependency> </dependencies>
安全提示
不要在生产环境的代码中硬编码Access Key和Secret Key,建议使用IAM角色、系统环境变量或者本地~/.aws/credentials配置文件来管理凭证,避免密钥泄露。
内容的提问来源于stack exchange,提问作者Alan Chu2
相关产品推荐
相关产品推荐

