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 に含まれている wscompile というツールを使う。 Google Web APIs を 使うための手順 (3) クライアントプログラムの作成と実行 Google の Webサービスにアクセスするプロ グラムを書く。 コンパイルと実行では ant というツールを使っ た方が便利。必要な jar ファイルがあまりに多 いため。 手順 (1) JWSDPの入手とインストール (1) ダウンロード http://java.sun.com/webservices/jwsdp/ind ex.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 の機能を利用で きた。 参考文献・URL (1) Java Web Services Developer Pack http://java.sun.com/webservices/jwsdp/ind ex.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/p ukiwiki.php 丸山・安藤ゼミで用意している Ant のページ です
© Copyright 2024 ExpyDoc