SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

Amazon Web ServiceとMavenで開発する蔵書管理システム

第1回 Mavenによる開発環境構築とAmazon Web Serviceの利用

実装

 Amazon Web ServiceのItemSearch Serviceにアクセスするプログラムを実装します。ItemSearch Serviceは、著者、題名(の一部)により該当する書誌情報を検索するサービスです。

 なお今回は、必要最小限度のパラメータしか設定していません。

src/main/java/bookrack/webservice/amazon/SimpleAmazonWebServices.java
package bookrack.webservice.amazon;

import org.apache.commons.httpclient.*;         ← (1)
import org.apache.commons.httpclient.methods.*;
import org.apache.commons.logging.*;

public class SimpleAmazonWebServices
{
    private final static Log log =
        LogFactory.getLog(SimpleAmazonWebServices.class);

    private final static String HOST
                                = "webservices.amazon.co.jp";
    private final static int PORT = 80;
    private final static String PATH = "/onca/xml";
    private final static String SERVICE
                                = "AWSECommerceService";
    private final static String ACCESS_KEY_ID
                                = "Your Subscription ID"; ← (2)

    public String itemSearch(String searchIndex, String keywords)
    {
        String response = null;
        try
        {
            NameValuePair[] params = new NameValuePair[5];
            params[0] = new NameValuePair("Service"       , SERVICE      );
            params[1] = new NameValuePair("AWSAccessKeyId", ACCESS_KEY_ID);
            params[2] = new NameValuePair("Operation"     , "ItemSearch" );
            params[3] = new NameValuePair("SearchIndex"   , searchIndex  );
            params[4] = new NameValuePair("Keywords"      , keywords     );

            HttpMethod method = new GetMethod();
            method.setURI(new HttpURL(HOST, PORT, PATH));
            log.trace("URI: " + method.getURI());
            method.setQueryString(params);               ← (3)
            log.trace("queryString: " + method.getQueryString());

            HttpClient client = new HttpClient();
            client.executeMethod(method);

            log.trace("statusCode: " + method.getStatusCode());
            response = method.getResponseBodyAsString(); ← (4)
        }
        catch(Exception e)      ← (5)
        {
            e.printStackTrace();
        }
        return response;
    }
}
  1. このようないいかげんなimportは、お奨めしません。
  2. 自分の登録IDを設定してください。
  3. NameValuePairクラスは、文字コードのエンコーディングを自前で行います。
  4. サンプルですので、結果のXMLを文字列として返します。実際はInputStreamを返して、JAXB2でXML→Java Objectに変換します。
  5. このようないいかげんなtry/catchは、お奨めしません。

テスト

 テストを実装します。

src/test/java/bookrack/webservice/amazon/SimpleAmazonWebServicesTest.java
package bookrack.webservice.amazon;

import junit.framework.*;                    ← (1)
import org.apache.commons.logging.*;

public class SimpleAmazonWebServicesTest extends TestCase
{
    private finalstatic Log log
        = LogFactory.getLog(SimpleAmazonWebServicesTest.class);
    public void testItemSearch()
    {
        SimpleAmazonWebServices service = new SimpleAmazonWebServices();
        String response = service.itemSearch("Books", "java web");
        log.trace("response: " + response);   ← (2)
    }
}
  1. テストなので、いいかげんなimportになっています。
  2. 本来なら、asertXXXで検証すべきですが……。

 テストの実行結果は、次のとおりです。

% mvn test

...
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running bookrack.webservice.amazon.SimpleAmazonWebServicesTest
2007/06/11 15:55:53:601 JST [TRACE] SimpleAmazonWebServicesTest
 - response:
<?xml version="1.0" encoding="UTF-8"?>   ← (1)
<ItemSearchResponse
 xmlns="http://webservices.amazon.com/AWSECommerceService/2005-10-05">
  ...
    <Item>
      <ASIN>4844357808</ASIN>
      <DetailPageURL>http://www.amazon.co.jp/...</DetailPageURL>
      <ItemAttributes>
        <Author>シーズ</Author>
        <Creator Role="著">シーズ</Creator>
        <Manufacturer>エムディエヌコーポレーション</Manufacturer>
        <ProductGroup>Book</ProductGroup>
        <Title>JavaScriptビジュアル・リファレンス</Title>
      </ItemAttributes>
    </Item>
    <Item>
    ...                    ← (2)
</ItemSearchResponse>
...
[INFO] ---------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ---------------------------------------------------------------
%
  1. 実際の出力は1行です。
  2. この後に、最大で10個Item(書誌情報)が続きます。

まとめ

 Amazon Web ServiceへのアクセスとMavenのTipsを紹介しました。次回は、Java Architecture for XML Binding(JAXB2)を利用して、Amazon Web ServiceのXMLデータをJava Objectに変換するMaven Pluginについて紹介します。

参考資料

  1. Amazon Web Service
  2. Amazon E-Commerce Service: Getting Started Guide (API Version: 2007-05-14)
  3. Amazon E-Commerce Service: Making REST Requests
  4. Apache Maven
  5. Maven Archetype Plugin
  6. Maven Surefire Plugin
  7. Jakarta commons logging
  8. Jakarta commons HTTPClient

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
特集記事連載記事一覧

もっと読む

この記事の著者

宮地 康彦(ミヤチ ヤスヒコ)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/1431 2008/09/03 14:03

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー