在使用 Java SDK 的 Java 连接 SP-API 中遇到问题 sellpartner-api-aa-java

问题描述

我已按照所有步骤生成 SDK 和 .jar 文件。 .我已将外部 jar 包含到我的项目中并逐步完成文档“[使用生成的 Java SDK 连接到销售合作伙伴 API https://github.com/amzn/selling-partner-api-docs/blob/main/guides/en-US/developer-guide/SellingPartnerApiDeveloperGuide.md#connecting-to-the-selling-partner-api-using-a-generated-java-sdk

第 1 步:

AWSAuthenticationCredentials awsAuthenticationCredentials=AWSAuthenticationCredentials.builder()
.accessKeyId("myAccessKeyId")
.secretKey("mySecretId")
.region("us-east-1")
.build();

第 2 步:

AWSAuthenticationCredentialsProvider awsAuthenticationCredentialsProvider=AWSAuthenticationCredentialsProvider.builder()
.roleArn("myroleARN")
.roleSessionName("myrolesessioname")
.build();

第 3 步:

LWAAuthorizationCredentials lwaAuthorizationCredentials = LWAAuthorizationCredentials.builder()
.clientId("myClientId")
.clientSecret("myClientSecret")
.refreshToken("Aztr|...")
.endpoint("https://api.amazon.com/auth/o2/token")
.build();

第 4 步:

SellersApi sellersApi = new SellersApi.Builder()
.awsAuthenticationCredentials(awsAuthenticationCredentials)
.lwaAuthorizationCredentials(lwaAuthorizationCredentials)
.awsAuthenticationCredentialsProvider(awsAuthenticationCredentialsProvider)
.endpoint("https://sellingpartnerapi-na.amazon.com")
.build();

问题在第 4 步。SellersAPI 类没有方法 Builder,因此 SellersApi.Builder() 未解析。

解决方法

我没有使用 SellersApi 来获得与 AWS 的连接,您可以参考我的其他答案 Amazon Selling Partner API request,了解如何使用 Seller Partner API 测试与 AWS 的连接。

此外,下面是如何Generating a Java client library的答案。

导航到您本地存储库副本的 sell-partner-api-models\models\sellers-api-model 文件夹中的 Sellers.json。

将sellers.json 复制到C:\SwaggerToCL。

生成客户端库。

java -jar C:\SwaggerToCL\swagger-codegen-cli.jar generate -i C:\SwaggerToCL\Sellers.json -l java -o C:\SwaggerToCL\Sellers_JavaCL

然后是你包中的SellersApi io.swagger.client.api;包含这样的构建器。
反正你看代码就知道怎么连接AWS了。

public static class Builder {
    private AWSAuthenticationCredentials awsAuthenticationCredentials;
    private LWAAuthorizationCredentials lwaAuthorizationCredentials;
    private String endpoint;
    private LWAAccessTokenCache lwaAccessTokenCache;
    private Boolean disableAccessTokenCache = false;
    private AWSAuthenticationCredentialsProvider awsAuthenticationCredentialsProvider;

    public Builder awsAuthenticationCredentials(AWSAuthenticationCredentials awsAuthenticationCredentials) {
        this.awsAuthenticationCredentials = awsAuthenticationCredentials;
        return this;
    }

    public Builder lwaAuthorizationCredentials(LWAAuthorizationCredentials lwaAuthorizationCredentials) {
        this.lwaAuthorizationCredentials = lwaAuthorizationCredentials;
        return this;
    }

    public Builder endpoint(String endpoint) {
        this.endpoint = endpoint;
        return this;
    }
    
    public Builder lwaAccessTokenCache(LWAAccessTokenCache lwaAccessTokenCache) {
        this.lwaAccessTokenCache = lwaAccessTokenCache;
        return this;
    }
    
   public Builder disableAccessTokenCache() {
        this.disableAccessTokenCache = true;
        return this;
    }
    
    public Builder awsAuthenticationCredentialsProvider(AWSAuthenticationCredentialsProvider awsAuthenticationCredentialsProvider) {
        this.awsAuthenticationCredentialsProvider = awsAuthenticationCredentialsProvider;
        return this;
    }
    

    public SellersApi build() {
        if (awsAuthenticationCredentials == null) {
            throw new RuntimeException("AWSAuthenticationCredentials not set");
        }

        if (lwaAuthorizationCredentials == null) {
            throw new RuntimeException("LWAAuthorizationCredentials not set");
        }

        if (StringUtil.isEmpty(endpoint)) {
            throw new RuntimeException("Endpoint not set");
        }

        AWSSigV4Signer awsSigV4Signer;
        if ( awsAuthenticationCredentialsProvider == null) {
            awsSigV4Signer = new AWSSigV4Signer(awsAuthenticationCredentials);
        }
        else {
            awsSigV4Signer = new AWSSigV4Signer(awsAuthenticationCredentials,awsAuthenticationCredentialsProvider);
        }
        
        LWAAuthorizationSigner lwaAuthorizationSigner = null;            
        if (disableAccessTokenCache) {
            lwaAuthorizationSigner = new LWAAuthorizationSigner(lwaAuthorizationCredentials);
        }
        else {
            if (lwaAccessTokenCache == null) {
                lwaAccessTokenCache = new LWAAccessTokenCacheImpl();                  
             }
             lwaAuthorizationSigner = new LWAAuthorizationSigner(lwaAuthorizationCredentials,lwaAccessTokenCache);
        }

        return new SellersApi(new ApiClient()
            .setAWSSigV4Signer(awsSigV4Signer)
            .setLWAAuthorizationSigner(lwaAuthorizationSigner)
            .setBasePath(endpoint));
    }
}