GAE/J+GWTでAmazon APIを利用する時のBase64クラスの問題

引き続き、Google App Engineで色々遊んでいます。

折角なので、他のウェブサービスのAPIも利用してみようかな〜っと思いまして、

王様の一つである"Amazon Product Advertising API"をチャレンジしてみました。

Amazon側は、Google App Engine用のサンプルとかを置いていませんが、

Java開発者用向きのサンプルコードをリリースしています。

具体的に言うと、サンプルコードの「ItemLookupSample.java」と、

アマゾンへのリクエストを補助するための「SignedRequestsHelper.java」ですね。

ソースコードのファイルそのものは、下記のURLから取得出来ます。

Product Advertising API Signed Requests Sample Code – Java REST/QUERY

基本的に、「ItemLookupSample.java」はサンプルなので、

これをそのまま使う…ではなく、これを参考して、

「SignedRequestsHelper.java」を経由し、

自分でリクエストをAmazonに送信するコードを書く必要があります。

で、「SignedRequestsHelper.java」をそのまま

Google App Engineで使いところ…ですが、

ちょっとした修正を加える必要があります。

まず、このまま使おうとしたら、こんな感じのエラーが出ます。

「java.lang.ClassNotFoundException: org.apache.commons.codec.binary.Base64」

で、色々調べたら、この問題が起きるのは、

恐らくGWT(Google Web Toolkit)も使っていたので、

そこにうまくリフレクションが出きなかった…のような気がします。

ネットでいろいろ調べましたが、どうも今ひとつパッっとした解決策が見つからず。

で、自分でEclipseで色々試しましたら、

GAE/Jのパッケージの中に、専用のBase64クラスがある…っと気づきまして、

これを使ったら、問題はアッサリ解決出きました。

折角なので、解決法をメモを兼ねてここに書き残します。

本来の「SignedRequestsHelper.java」では、

「import org.apache.commons.codec.binary.Base64;」で、

apacheコモンズのcodecの中のBase64を使っていましたが、

これをGAE/Jのやつで置き換えます。

具体的に言うと、こんな感じです。

「import com.google.appengine.repackaged.com.google.common.util.Base64;」

で、このBase64クラスは本来のBase64クラスの使い方がちょっと違いますので、

private String hmac(String stringToSign)メソッド内の記述も変更します。

176行のこのメソッドのBase64の記述は元々こんな感じですが…

Base64 encoder = new Base64();
signature = new String(encoder.encode(rawHmac));

これをこんな感じで一行に書き換えます。

signature = new String(Base64.encode(rawHmac));

こんな感じで、少なくともぉぅぇぃは問題を解決し、

Google App Engine for JavaからAmazin APIへ問題なくリクエストを出すことが出きました。

コードをいじっていましたら、「SignedRequestsHelper.java」のほかにも、

いろいろ発見がありましたが、別の機会がありましたら、

またちょこっと話をしたいと思います。

それにしても、GAE/Jのチュートリアルとドキュメントは素晴らしいですね…。

テキストも参考書も要らずに、チュートリアルに沿ってやるだけで、

いろいろ理解してしまいます。

大半の問題は、ドキュメントやFAQで解決できてしまいます。

というか、本屋でGAE/Jの本も何冊立ち読みしてみましたが、

グーグルのドキュメントのほうがずっと良かったね。

こんなのウェブ上で公開していたら,そりゃ出版社はピンチになりますね。

Google App Engineデベロッパー ガイド

しかし、パソコンでこういうドキュメントを読んでいると、

やっぱりちょっとつかれるな〜って感じになりますね。

目とか肩とか…ね。

iPlateに全く興味無かったが、こういうものを読むための、

何かしらのリーダーがあるといいかもしれません〜

comments

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*