You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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. 已导入1.x版本的BOM依赖管理,所有1.x系列依赖不需要单独标注版本号
  2. 你使用的是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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 15:06:05