web サービスを使った クライアント・プログラム

53
Web ササササササササ ササササササ サササササ ササササササササ サ 7 サ / 2004-06-25

Upload: addison-skinner

Post on 02-Jan-2016

31 views

Category:

Documents


2 download

DESCRIPTION

Web サービスを使った クライアント・プログラム. ソフトウェア特論 第 7 回 / 2004-06-25. お知らせ. レポート課題を出しています。 提出は 7/30 ( 金 ) まで。. きょうの目標. Web サービスの基本を復習しよう。 Web サービスを使ったクライアント・プログラムを作ってみよう。 Google API を使ってみる。. 「 Web アプリケーション」の場合. 「 Web サーバ」が「 Web ブラウザ」と通信を行う。. 「 Web サービス」の場合. 「 Web サーバ」が「プログラム」と通信を行う。. - PowerPoint PPT Presentation

TRANSCRIPT

Web サービスを使ったクライアント・プログラム

ソフトウェア特論第 7 回 / 2004-06-25

お知らせ レポート課題を出しています。 提出は 7/30 ( 金 ) まで。

きょうの目標 Web サービスの基本を復習しよう。 Web サービスを使ったクライアント・

プログラムを作ってみよう。 Google API を使ってみる。

「 Web アプリケーション」の場合 「 Web サーバ」が「 Web ブラウザ」

と通信を行う。

「 Web サービス」の場合 「 Web サーバ」が「プログラム」と通

信を行う。

Web サービスとは何か? Web のブラウザを使わずに、プログラ

ム中から Web にアクセスして必要な情報を取り出せるサービス。

Web サービスで使われている技術

HTTP の利用 (1)

Web サービスは、クライアントとは(ネットワーク的に)離れていることが想定されている。

しかし、ネットワーク的に離れたサービスにアクセスしようと思っても、たいていのサイトでは Web とメール以外のポートは閉じている。

HTTP の利用 (2)

しかし、 HTTP (80 番 ) は使えるだろう。

そこで、トランスポート層のプロトコルとして HTTP を使う。

まれに、 SMTP を使う場合もある。

XML の利用 Web サービスで利用されるデータには、

XML が使われている。 そのため、 Web サービスを構成するプ

ログラムは、どんな言語で記述されてもよい。

SOAP

Web サービスに対する「要求」と、クライアントへの「応答」のフォーマット

XML で記述されている Google Web APIs では

「こんな言葉を含むページを調べたい」要求 「こんなページがありました」という応答 この2つが SOAP で記述されている

WSDL (1)

Web サービスの具体的な内容を書いてあるもの どこにアクセスすればよいのか どのようなメソッドがあるか など

(Java での ) インタフェースのようなもの

XML で記述されている。

WSDL (2)

WSDL から、 Web サービスにアクセスするクライアントプログラムを生成できる。 JWSDP (Java の Web サービス開発キット ) で

は wscompile というツールで WSDL から Java プログラムを生成

クライアントプログラムからはメソッドを呼び出すだけで、プログラムの中身は Web サービス側にあるので、これでうまくいく。

WSDL (3)

既存のプログラムから WSDL を生成することもできる。

Google Web APIs では、 WSDL 文書がはじめから付属している。

JAX-RPC

RMI のしくみ (1)

RMI のしくみ (2)

クライアントで Hello クラスのインスタンスを作成する。

クライアントで、このインスタンスの sayHello メソッドを実行する。

Hello クラスの実装はサーバ側にある。 サーバで sayHello メソッドが実行さ

れ、返値がクライアントに返される。

RPC (Remote Procedure Call)

RMI の原型となった技術 Sun Microsystems によって開発され

た。 別のマシン上にある手続きを実行する

ためのしくみ。 Unix, Windows で広く普及している。

JAX-RPC とは Java で「 RPC 型」の Web サービスを

実現するための API JWSDP, J2EE のパッケージに同梱され

ている。 J2SE には入っていない

JAX-RPC のしくみ (1)

JAX-RPC のしくみ (2) プログラミングスタイルは RMI と変わら

ない。 クライアントから利用できるメソッド

は、” WSDL” によって定義されている。 RMI のスケルトンは、 JAX-RPC では

“ Tie” となる。 クライアントプログラムの実行にあたって

は、” JAX-RPC Runtime” が必要になる。

JAX-RPC のしくみ (3)

サーバとクライアントの通信は、 HTTP 上の SOAP が使われる。

RMI の rmiregistry に代わるものとして、 UDDI というものがある。 本講義では扱いません。

Google Web APIs の利用

Google Web APIs とは プログラム (Java など ) から、 Google

にアクセスするための API これが Web サービスとして提供されてい

る。 プログラムから Google にアクセスして、

検索結果をプログラムで処理できる。 ある言葉に関する Google の検索件数を

毎日カウントする、といったプログラムが作成できる。

Google Web APIs を使うには?

Google の Web サービスにアクセスするためのクライアントプログラムと、スタブが必要になる。

Google Web APIs で用意されている WSDL からスタブを生成できる。

Google Web APIs を使うための手順 (1)

JWSDP の入手とインストール JWSDP に、 JAX-RPC の API やさまざま

なツールが含まれている。 いくつか環境変数の設定が必要

Google Web APIs の入手 Google の Web サービスで利用する

WSDL を入手できる。 別にライセンスキーの取得も必要

Google Web APIs を使うための手順 (2)

スタブの生成 WSDL から生成する。自分でプログラミ

ングする必要はない。 ただし、 XML は書かねばならない。 生成には、 JWSDP に含まれている wsco

mpile というツールを使う。

Google Web APIs を使うための手順 (3)

クライアントプログラムの作成と実行 Google の Web サービスにアクセスする

プログラムを書く。 コンパイルと実行では ant というツール

を使った方が便利。必要な jar ファイルがあまりに多いため。

手順 (1)JWSDP の入手とインストール (1)

ダウンロード http://java.sun.com/webservices/jwsd

p/index.jsp JWSDP 1.3 をダウンロードする。

インストールする 環境変数の設定

JWSDP をインストールしたディレクトリを、環境変数 JWSDP_HOME にする。

手順 (1)JWSDP の入手とインストール (2)

PATH の設定 %JWSDP_HOME%\apache-ant\bin %JWSDP_HOME%\jaxrpc\bin

手順 (2) Google Web APIs の入手 (1)

ダウンロード http://www.google.com/apis/

ダウンロードしたファイルを開くと GoogleSearch.wsdl という WSDL ファイ

ルがある ほかには Java や .Net のサンプルプログ

ラムなど

手順 (2) Google Web APIs の入手 (2)

Google Web APIs を利用するには、アカウントの作成が必要

1 日に 1,000 回までの検索が可能になる

http://www.google.com/apis/ の “ Create Account” をクリックして、必要な項目を入力

手順 (2) Google Web APIs の入手 (3)

登録されたメールアドレスにライセンスキーが送られる。 Your Google Web APIs license key is xxxxx このライセンスキーは、 Web サービスを

呼び出すメソッドの引数として利用する

手順 (3)スタブの生成 (1)

WSDL から生成する。自分でプログラミングする必要はない。

ただし、 XML は書かねばならない。 生成には、 JWSDP に含まれている ws

compile というツールを使う。

手順 (3)スタブの生成 (2) スタブに関する情報を設定するため、 XML を記述す

る必要がある。

<?xml version="1.0" encoding="UTF-8"?><configuration xmlns=

"http://java.sun.com/xml/ns/jax-rpc/ri/config"><wsdl location="GoogleSearch.wsdl"

packageName="jp.ac.wakhok.tomoharu.google" />

</configuration>

手順 (3)スタブの生成 (3)

<wsdl location="GoogleSearch.wsdl"packageName=

"jp.ac.wakhok.tomoharu.google" />

location 属性で WSDL ファイルを指定 packageName 属性は、生成されるスタ

ブのパッケージ名を指定

手順 (3)スタブの生成 (4)

wscompile -gen:client -keep config.xml

-gen:client オプションでスタブを生成 -keep オプションで、スタブのソース

ファイルを残す config.xml は先に作成した設定ファイ

手順 (3)スタブの生成 (5)

パッケージ名で指定したディレクトリに、ソースファイル・クラスファイルが作成される。 例えば、 jp\ac\wakhok\tomoharu\google スタブのほか、 Google API で利用できる

インタフェースなどが生成される。

手順 (4)クライアントプログラムの作成 (1)

// まずはインポートからimport javax.xml.rpc.Stub;// wscompile によって生成されたスタ

ブたちimport jp.ac.wakhok.tomoharu.google.*;

手順 (4)クライアントプログラムの作成 (2)

// (1) スタブの生成GoogleSearchPort_Stub stub =

(GoogleSearchPort_Stub)(new GoogleSearchService_Impl()

.getGoogleSearchPort());

手順 (4)クライアントプログラムの作成 (3)

// (2) スタブに Web サービスの URL を// 設定するstub._setProperty(

Stub.ENDPOINT_ADDRESS_PROPERTY,“http://api.google.com/search/beta2”

);

手順 (4)クライアントプログラムの作成 (4)

// (3)Google の検索処理を呼び出す// “xxxxx” が ライセンスキー// args[0] が検索したい言葉GoogleSearchResult result =

stub.doGoogleSearch(“xxxxx", args[0], 1, 10, false, "", false, "", "", "");

メソッド呼び出しと WSDL クライアントプログラム

stub.doGoogleSearch(); WSDL

<operation name="doGoogleSearch"><input

message="typens:doGoogleSearch"/><outputmessage=

"typens:doGoogleSearchResponse"/></operation>

手順 (4)クライアントプログラムの作成 (6)

// (4) 検索結果の出力ResultElement[] elements =

result.getResultElements();for (int i=0; i<10; i++) {

System.out.println(i);System.out.println(elements[i].getTitle());System.out.println(elements[i].getURL());System.out.println();

}

手順 (4)クライアントプログラムの作成 (7)

Ant というツールを使ってコンパイルする。 Ant

Ant は、 Java のプログラムをコンパイルしたり実行したりする上で手助けをしてくれるツール

Unix での make のようなもの コンパイルにはいくつかの Jar ファイルが必要

になるので、 Ant を使うのが便利 Ant は JWSDP に同梱されている。

手順 (4)クライアントプログラムの作成 (8)

Ant では、プログラムのコンパイルや実行の方法を build.xml というファイルに記述する。

コンパイルするには、 build.xml があるディレクトリで次のコマンドを実行する。 ant compile

詳しくは次回解説します。

手順 (5)クライアントプログラムの実行 (1)

実行でも Ant を利用する。 実行するには、 build.xml があるディ

レクトリで次のコマンドを実行する。 ant run

“wakhok” という言葉について、 Google の検索を行い、上位 10 件のタイトルと URL が表示される。

手順 (5)クライアントプログラムの実行 (2) 下の “ wakhok” と書かれている部分を書き換えると、

その言葉に関して Google の検索を行う。

<target name="run" depends="compile"><java classname="GoogleSearch" >

<arg value="wakhok"/> <classpath>

<path refid="wspack.classpath"/></classpath>

</java></target>

実行例run: [java] 0 [java] <b>wakhok</b>.TV [java] http://www.ctc-wakhok.tv/

[java] 1 [java] UNIX データベース入門 [java] http://www.wakhok.ac.jp/DB/DB.html

[java] 2 [java] Welcome to Wakkanaihokusei Biblion [java] http://www.wakhok.ac.jp/biblion.html

何が起きたのか? WSDL からスタブを作成し、スタブの

機能を利用するクライアントプログラムを作成した。 ほかの言語でも、 wscompile のような

ツールがあれば、その言語用のスタブを作成できる。

プログラム中から Google の機能を利用できた。

参考文献・ URL (1)

Java Web Services Developer Pack http://java.sun.com/webservices/jwsd

p/index.jsp JWSDP のトップページです。

Google Web APIs http://www.google.com/apis/ Google Web APIs のページです。

参考文献・ URL (2)

Google Hacks Tara Calishain, Rael Dornfest 著 / 山名早

人 監訳 オライリー・ジャパン 4-87311-136-5 Google を使いこなす方法をさまざまな角度

から解説した本。 Google Web APIs についての解説もかなりあります。良書です。

参考文献・ URL (3)

Ant 講座さん http://

www.wakhok.ac.jp/~nara/pukiwiki/pukiwiki.php

丸山・安藤ゼミで用意している Ant のページです