530 likes | 638 Views
Web サービスを使った クライアント・プログラム. ソフトウェア特論 第 7 回 / 2004-06-25. お知らせ. レポート課題を出しています。 提出は 7/30 ( 金 ) まで。. きょうの目標. Web サービスの基本を復習しよう。 Web サービスを使ったクライアント・プログラムを作ってみよう。 Google API を使ってみる。. 「 Web アプリケーション」の場合. 「 Web サーバ」が「 Web ブラウザ」と通信を行う。. 「 Web サービス」の場合. 「 Web サーバ」が「プログラム」と通信を行う。.
E N D
Webサービスを使ったクライアント・プログラムWebサービスを使ったクライアント・プログラム ソフトウェア特論 第7回 / 2004-06-25
お知らせ • レポート課題を出しています。 • 提出は 7/30 (金) まで。
きょうの目標 • Webサービスの基本を復習しよう。 • Webサービスを使ったクライアント・プログラムを作ってみよう。 • Google API を使ってみる。
「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文書がはじめから付属している。
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 のしくみ (2) • プログラミングスタイルは RMI と変わらない。 • クライアントから利用できるメソッドは、”WSDL”によって定義されている。 • RMI のスケルトンは、JAX-RPC では “Tie”となる。 • クライアントプログラムの実行にあたっては、”JAX-RPC Runtime”が必要になる。
JAX-RPC のしくみ (3) • サーバとクライアントの通信は、HTTP 上の SOAP が使われる。 • RMI の rmiregistry に代わるものとして、UDDI というものがある。 • 本講義では扱いません。
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 に含まれている wscompile というツールを使う。
Google Web APIs を使うための手順 (3) • クライアントプログラムの作成と実行 • Google の Webサービスにアクセスするプログラムを書く。 • コンパイルと実行では ant というツールを使った方が便利。必要な jar ファイルがあまりに多いため。
手順 (1)JWSDPの入手とインストール (1) • ダウンロード • http://java.sun.com/webservices/jwsdp/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 に含まれている wscompile というツールを使う。
手順 (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 の機能を利用できた。