Download presentation
Presentation is loading. Please wait.
1
Webサービスを使った クライアント・プログラム
ソフトウェア特論 第7回 /
2
お知らせ レポート課題を出しています。 提出は 7/30 (金) まで。
3
きょうの目標 Webサービスの基本を復習しよう。 Webサービスを使ったクライアント・プログラムを作ってみよう。
Google API を使ってみる。
4
「Webアプリケーション」の場合 「Webサーバ」が「Webブラウザ」と通信を行う。
5
「Webサービス」の場合 「Webサーバ」が「プログラム」と通信を行う。
6
Webサービスとは何か? Webのブラウザを使わずに、プログラム中から Web にアクセスして必要な情報を取り出せるサービス。
7
Webサービスで使われている 技術
8
HTTPの利用 (1) Webサービスは、クライアントとは(ネットワーク的に)離れていることが想定されている。
9
HTTPの利用 (2) しかし、HTTP (80番) は使えるだろう。 そこで、トランスポート層のプロトコルとして HTTP を使う。
まれに、SMTP を使う場合もある。
10
XML の利用 Webサービスで利用されるデータには、XML が使われている。
11
SOAP Webサービスに対する「要求」と、クライアントへの「応答」のフォーマット XML で記述されている
Google Web APIs では 「こんな言葉を含むページを調べたい」要求 「こんなページがありました」という応答 この2つがSOAPで記述されている
12
WSDL (1) Webサービスの具体的な内容を書いてあるもの (Javaでの)インタフェースのようなもの XML で記述されている。
どこにアクセスすればよいのか どのようなメソッドがあるか など (Javaでの)インタフェースのようなもの XML で記述されている。
13
WSDL (2) WSDL から、Webサービスにアクセスするクライアントプログラムを生成できる。
JWSDP (JavaのWebサービス開発キット)ではwscompile というツールで WSDL から Javaプログラムを生成 クライアントプログラムからはメソッドを呼び出すだけで、プログラムの中身はWebサービス側にあるので、これでうまくいく。
14
WSDL (3) 既存のプログラムからWSDLを生成することもできる。
Google Web APIs では、WSDL文書がはじめから付属している。
15
JAX-RPC
16
RMIのしくみ (1)
17
RMI のしくみ (2) クライアントで Hello クラスのインスタンスを作成する。
クライアントで、このインスタンスの sayHello メソッドを実行する。 Hello クラスの実装はサーバ側にある。 サーバで sayHello メソッドが実行され、返値がクライアントに返される。
18
RPC (Remote Procedure Call)
RMI の原型となった技術 Sun Microsystems によって開発された。 別のマシン上にある手続きを実行するためのしくみ。 Unix, Windows で広く普及している。
19
JAX-RPC とは Javaで「RPC型」のWebサービスを実現するための API JWSDP, J2EE のパッケージに同梱されている。
J2SE には入っていない
20
JAX-RPC のしくみ (1)
21
JAX-RPC のしくみ (2) プログラミングスタイルは RMI と変わらない。
クライアントから利用できるメソッドは、”WSDL” によって定義されている。 RMI のスケルトンは、JAX-RPC では “Tie” となる。 クライアントプログラムの実行にあたっては、”JAX-RPC Runtime” が必要になる。
22
JAX-RPC のしくみ (3) サーバとクライアントの通信は、HTTP 上の SOAP が使われる。
RMI の rmiregistry に代わるものとして、UDDI というものがある。 本講義では扱いません。
23
Google Web APIs の利用
24
Google Web APIs とは プログラム(Javaなど)から、Google にアクセスするための API
25
Google Web APIs を使うには? Google の Webサービスにアクセスするためのクライアントプログラムと、スタブが必要になる。 Google Web APIs で用意されている WSDL からスタブを生成できる。
26
Google Web APIs を 使うための手順 (1)
JWSDP の入手とインストール JWSDP に、JAX-RPC のAPI やさまざまなツールが含まれている。 いくつか環境変数の設定が必要 Google Web APIs の入手 Google の Webサービスで利用する WSDL を入手できる。 別にライセンスキーの取得も必要
27
Google Web APIs を 使うための手順 (2)
スタブの生成 WSDL から生成する。自分でプログラミングする必要はない。 ただし、XML は書かねばならない。 生成には、JWSDP に含まれている wscompile というツールを使う。
28
Google Web APIs を 使うための手順 (3)
クライアントプログラムの作成と実行 Google の Webサービスにアクセスするプログラムを書く。 コンパイルと実行では ant というツールを使った方が便利。必要な jar ファイルがあまりに多いため。
29
手順 (1) JWSDPの入手とインストール (1)
ダウンロード JWSDP 1.3 をダウンロードする。 インストールする 環境変数の設定 JWSDP をインストールしたディレクトリを、環境変数 JWSDP_HOME にする。
30
手順 (1) JWSDPの入手とインストール (2)
PATH の設定 %JWSDP_HOME%\apache-ant\bin %JWSDP_HOME%\jaxrpc\bin
31
手順 (2) Google Web APIs の入手 (1)
ダウンロード ダウンロードしたファイルを開くと GoogleSearch.wsdl という WSDL ファイルがある ほかには Java や .Net のサンプルプログラムなど
32
手順 (2) Google Web APIs の入手 (2)
1日に1,000回までの検索が可能になる の “Create Account” をクリックして、必要な項目を入力
33
手順 (2) Google Web APIs の入手 (3)
登録されたメールアドレスにライセンスキーが送られる。 Your Google Web APIs license key is xxxxx このライセンスキーは、Webサービスを呼び出すメソッドの引数として利用する
34
手順 (3) スタブの生成 (1) WSDL から生成する。自分でプログラミングする必要はない。 ただし、XML は書かねばならない。
生成には、JWSDP に含まれている wscompile というツールを使う。
35
手順 (3) スタブの生成 (2) スタブに関する情報を設定するため、XML を記述する必要がある。
<?xml version="1.0" encoding="UTF-8"?> <configuration xmlns= " <wsdl location="GoogleSearch.wsdl" packageName= "jp.ac.wakhok.tomoharu.google" /> </configuration>
36
手順 (3) スタブの生成 (3) <wsdl location="GoogleSearch.wsdl" packageName=
"jp.ac.wakhok.tomoharu.google" /> location属性でWSDLファイルを指定 packageName属性は、生成されるスタブのパッケージ名を指定
37
手順 (3) スタブの生成 (4) wscompile -gen:client -keep config.xml
38
手順 (3) スタブの生成 (5) パッケージ名で指定したディレクトリに、ソースファイル・クラスファイルが作成される。
例えば、jp\ac\wakhok\tomoharu\google スタブのほか、Google API で利用できるインタフェースなどが生成される。
39
手順 (4) クライアントプログラムの作成 (1)
// まずはインポートから import javax.xml.rpc.Stub; // wscompile によって生成されたスタブたち import jp.ac.wakhok.tomoharu.google.*;
40
手順 (4) クライアントプログラムの作成 (2)
// (1)スタブの生成 GoogleSearchPort_Stub stub = (GoogleSearchPort_Stub) (new GoogleSearchService_Impl() .getGoogleSearchPort());
41
手順 (4) クライアントプログラムの作成 (3)
// (2)スタブにWebサービスのURLを // 設定する stub._setProperty( Stub.ENDPOINT_ADDRESS_PROPERTY, “ );
42
手順 (4) クライアントプログラムの作成 (4)
// (3)Google の検索処理を呼び出す // “xxxxx” が ライセンスキー // args[0] が検索したい言葉 GoogleSearchResult result = stub.doGoogleSearch(“xxxxx", args[0], 1, 10, false, "", false, "", "", "");
43
メソッド呼び出しとWSDL クライアントプログラム WSDL stub.doGoogleSearch();
<operation name="doGoogleSearch"> <input message="typens:doGoogleSearch"/> <outputmessage= "typens:doGoogleSearchResponse"/> </operation>
44
手順 (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(); }
45
手順 (4) クライアントプログラムの作成 (7)
Ant というツールを使ってコンパイルする。 Ant Ant は、Javaのプログラムをコンパイルしたり実行したりする上で手助けをしてくれるツール Unix での make のようなもの コンパイルにはいくつかの Jar ファイルが必要になるので、Ant を使うのが便利 Ant は JWSDP に同梱されている。
46
手順 (4) クライアントプログラムの作成 (8)
Ant では、プログラムのコンパイルや実行の方法を build.xml というファイルに記述する。 コンパイルするには、build.xml があるディレクトリで次のコマンドを実行する。 ant compile 詳しくは次回解説します。
47
手順 (5) クライアントプログラムの実行 (1)
実行でも Ant を利用する。 実行するには、build.xml があるディレクトリで次のコマンドを実行する。 ant run “wakhok” という言葉について、Google の検索を行い、上位10件のタイトルとURLが表示される。
48
手順 (5) クライアントプログラムの実行 (2)
下の “wakhok” と書かれている部分を書き換えると、その言葉に関して Google の検索を行う。 <target name="run" depends="compile"> <java classname="GoogleSearch" > <arg value="wakhok"/> <classpath> <path refid="wspack.classpath"/> </classpath> </java> </target>
49
実行例 run: [java] 0 [java] <b>wakhok</b>.TV
[java] UNIX データベース入門 [java] [java] 2 [java] Welcome to Wakkanaihokusei Biblion [java]
50
何が起きたのか? WSDLからスタブを作成し、スタブの機能を利用するクライアントプログラムを作成した。
ほかの言語でも、wscompile のようなツールがあれば、その言語用のスタブを作成できる。 プログラム中から Google の機能を利用できた。
51
参考文献・URL (1) Java Web Services Developer Pack Google Web APIs
JWSDPのトップページです。 Google Web APIs Google Web APIs のページです。
52
参考文献・URL (2) Google Hacks Tara Calishain, Rael Dornfest 著 / 山名早人 監訳
オライリー・ジャパン Google を使いこなす方法をさまざまな角度から解説した本。Google Web APIs についての解説もかなりあります。良書です。
53
参考文献・URL (3) Ant講座さん 丸山・安藤ゼミで用意している Ant のページです
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.