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 が発生します。 何か根本的な考え違いをしているでしょうか。

gefragt vor 4 Monaten201 Aufrufe
2 Antworten
0
Akzeptierte Antwort

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

profile picture
EXPERTE
beantwortet vor 4 Monaten
  • 回答ありがとうございます。 教えていただいたサンプルコードは、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() を使用せずにアクセスキーとシークレットキーを指定したクレデンシャルを生成する方法はないでしょうか。

beantwortet vor 3 Monaten

Du bist nicht angemeldet. Anmelden um eine Antwort zu veröffentlichen.

Eine gute Antwort beantwortet die Frage klar, gibt konstruktives Feedback und fördert die berufliche Weiterentwicklung des Fragenstellers.

Richtlinien für die Beantwortung von Fragen