AWS SDK for Java 2.x AwsBasicCredentials .create の ClassCastException

0

AWS SDK for Java 2.21.29 を利用して、S3 の 署名付きURLの取得を行おうとしています。 (Java の実行環境としては Javaインタプリタエンジン BeanShell を使用しています。) アクセスキーとシークレットキーを指定したクレデンシャルを取得するのに import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; import software.amazon.awssdk.auth.credentials.AwsCredentials;

AwsCredentials awsCreds = AwsBasicCredentials.create(accessKeyId, secretAccessKey); としていますが、ここで

java.lang.ClassCastException: Cannot cast software.amazon.awssdk.identity.spi.internal.DefaultAwsCredentialsIdentity to software.amazon.awssdk.auth.credentials.AwsCredentials が発生します。 何か根本的な考え違いをしているでしょうか。

已提问 4 个月前201 查看次数
2 回答
0
已接受的回答

あまりJava SDKには詳しくないのですが、以下のブログで紹介されているコードを見る限りだと「import software.amazon.awssdk.auth.credentials.AwsCredentials;」ではなく「import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider;」を使用して作成しているように見受けられます。
https://qiita.com/tamorieeeen/items/051eb30f278e03f4ceff

profile picture
专家
已回答 4 个月前
  • 回答ありがとうございます。 教えていただいたサンプルコードは、S3Clientを使用する手順ですが、コードの StaticCredentialsProvider credentialsProvider = StaticCredentialsProvider.create( AwsBasicCredentials.create(accessKey, secretKey)); の部分とお見受けします。 確かに StaticCredentialsProvider は使用するのですが、その create の引数に渡すための AwsBasicCredentials.create の戻り値が、API Reference - 2.28.11 https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/auth/credentials/AwsBasicCredentials.html#create(java.lang.String,java.lang.String) の記載通りにならず、 software.amazon.awssdk.identity.spi.internal.DefaultAwsCredentialsIdentity になってしまうようなのです。 なので、サンプルコードを実行すると同様に Static method create( software.amazon.awssdk.identity.spi.internal.DefaultAwsCredentialsIdentity ) not found in class'software.amazon.awssdk.auth.credentials.StaticCredentialsProvider' と言われてしまうのです。 環境が壊れているということなんでしょうか・・・

0

https://github.com/aws/aws-sdk-java-v2/issues/4696 で、2.21.21 で同様の現象の報告があり回避策が示されていますが、2.21.29 の制限か BeanShell の問題かわわかりませんが、 No static field or inner class: ANONYMOUS_CREDENTIALS of class software.amazon.awssdk.auth.credentials.AwsBasicCredentials という結果でした。 AwsBasicCredentials.builder() を使用せずにアクセスキーとシークレットキーを指定したクレデンシャルを生成する方法はないでしょうか。

已回答 3 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则