GAE/J上のシステムをAmazon Product Advertising API 署名認証対応

2009年8月15日より、Amazonの書籍情報取得用WebAPIに署名認証が必要になりました。
GAE/J上に構築しているシステムにて対応を行いましたところ、幾つかハマリポイントが有りましたのでメモ。


サンプルコードが提供されていたため、対応自体は難しく有りません。
Product Advertising API Signed Requests Sample Code - Java REST/QUERY


■手順
1).Amazon Web Serviceより、Access Key ID と Secret Access Key を取得。
2).AmazonへのリクエストURL生成部を改修。


■ハマリポイント
1).アカウント申請の際の入力必須項目で有る「郵便番号」。日本からの申請の場合、郵便番号は3桁以外を受け付けてくれないようです。
エラーメッセージが分かりにくく、かなり長い時間を取られました。

2).commons-codec(Base64クラス)を使用しますが、commons-codec1.4ではダメで1.3を使う必要が有るようです。
具体的には1.4を使用して生成したURLを叩いた場合、下記の通りエラーとして処理されてしまいます。

<?xml version="1.0" ?> 
<ItemLookupErrorResponse xmlns="http://ecs.amazonaws.com/doc/2009-07-01/">
<Error>
<Code>SignatureDoesNotMatch</Code> 
<Message>The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.</Message> 
</Error>
<RequestID>12e4603b-69a1-47ba-82bc-84c8a7651aa6</RequestID> 
</ItemLookupErrorResponse>

appengine-api-stubs.jarに含まれるBase64クラスでも期待動作が確認できました。