何時間もいじくり回してインターネット全体を何度か読んだ後、Product Advertising APIで使用するリクエストに署名する方法を理解できません。
これまでのところ、提供されたWSDLファイルからクライアントを生成することができました。これには、Amazonのチュートリアルを使用しました。あなたはそれをここで見つけることができます:
これまでのところ問題はありません。クライアントをテストするために、小さなコードを書きました。コードは、製品に関する情報を単に取得することを目的としています。製品はASINで指定されています。
コード:
package client;
import com.ECS.client.jax.AWSECommerceService;
import com.ECS.client.jax.AWSECommerceServicePortType;
import com.ECS.client.jax.ItemLookup;
import com.ECS.client.jax.ItemLookupResponse;
import com.ECS.client.jax.ItemLookupRequest;
public class Client {
public static void main(String[] args) {
System.out.println("API Test startet");
AWSECommerceService service = new AWSECommerceService();
AWSECommerceServicePortType port = service.getAWSECommerceServicePort();
ItemLookupRequest itemLookup = new ItemLookupRequest();
itemLookup.setIdType("ASIN");
itemLookup.getItemId().add("B000RE216U");
ItemLookup lookup = new ItemLookup();
lookup.setAWSAccessKeyId("<mykeyishere>");
lookup.getRequest().add(itemLookup);
ItemLookupResponse response = port.itemLookup(lookup);
String r = response.toString();
System.out.println("response: " + r);
System.out.println("API Test stopped");
}
}
ご覧のとおり、リクエストに署名する部分はありません。使用した多くのクラスを調べたところ、リクエストに署名するためのメソッドが見つかりませんでした。
では、どのようにリクエストに署名するのですか?
私は実際にドキュメントで何かを見つけました:リクエスト認証
ただし、独自のAPIは使用しません。提案されたソリューションは、多かれ少なかれ手動での使用のみを目的としています。クライアントクラスを調べて、リクエストURLを取得し、リクエストのサインインに必要なすべてのパーツを自分で配置できるかどうかを調べました。しかし、そのような方法はありません。
誰かが私が間違っていることを指摘してくれることを願っています。
これが私が問題を解決するためにしたことです。クレジットはすべて、ジョンとアマゾンフォーラムのメンバーに贈られます。
概要を説明する前に、問題の解決に役立った投稿へのリンクを示します。Amazonフォーラムのフォーラム投稿。
投稿にリンクされているawshandlerresolver.javaをダウンロードしました。自分のコードを変更したので、次のようになります。
package client;
import com.ECS.client.jax.AWSECommerceService;
import com.ECS.client.jax.AWSECommerceServicePortType;
import com.ECS.client.jax.ItemLookup;
import com.ECS.client.jax.ItemLookupResponse;
import com.ECS.client.jax.ItemLookupRequest;
public class Client {
public static void main(String[] args) {
System.out.println("API Test startet");
AWSECommerceService service = new AWSECommerceService();
service.setHandlerResolver(new AwsHandlerResolver("<Secret Key>")); // important
AWSECommerceServicePortType port = service.getAWSECommerceServicePort();
ItemLookupRequest itemLookup = new ItemLookupRequest();
itemLookup.setIdType("ASIN");
itemLookup.getItemId().add("B000RE216U");
ItemLookup lookup = new ItemLookup();
lookup.setAWSAccessKeyId("<Access Key>"); // important
lookup.getRequest().add(itemLookup);
ItemLookupResponse response = port.itemLookup(lookup);
String r = response.toString();
System.out.println("response: " + r);
System.out.println("API Test stopped");
}
}
最後のprintlnは多かれ少なかれ役に立たない。しかし、それは機能します。また、リンクされたWSDLジョンを使用して、新しいWebサービスクライアントを生成しました。質問に投稿したチュートリアルでURLを変更しました。
あなたがサービスを作成した後、これを試してください
service.setHandlerResolver(new AwsHandlerResolver(my_AWS_SECRET_KEY));
AwsHandlerResolverはBase64エンコーディングを使用するため、プロジェクトへの参照として追加するには、このクラスとこの jarファイルが必要です。
ファイル名はすべて小文字なので、AwsHandlerResolverファイルの名前をクラスの名前に変更する必要があります。
残りのコードは問題ないと思います。
WSDLはhttp://webservices.amazon.com/AWSECommerceService/AWSECommerceService.wsdlです
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加