セットアップが終わったら、こんどはWebサービスを構築する番だ。WSTKでは、JavaBeans、EJB、COMなどからSOAP-RPC型Webサービスを簡単に作ることができる。現状では、多くの人がこのSOAP-RPCによるWebサービスの構築に興味があるだろう。ここでは、Webサービスを提供するサーバとして「hostname」というDNS名を使って、そのWebサービス構築方法を解説しよう。以下から名前は適宜、ご自分のサーバ名に置き換えて読んでいただきたい。
WSTKのWebサービス開発手順には、3つのシナリオがある。
■既存アプリケーションをWebサービス化する
■WSDLから作る
■アクセス用プロキシ・コードを作る
■WSTK-APIでダイナミックにアクセス
試しに、以下のコードをWebサービス化して公開してみよう。本稿では、次に紹介する試作サービスをボトム・アップ型開発のシナリオで開発し、プロキシコード、WSTK-APIの両方の方法でアクセスする手順を紹介する。
import java.util.Properties; public class WstkTest { public static void main(String[] args) { WstkTest wt = new WstkTest(); String key = "java.vm.vendor"; if(args.length > 0) key = args[0]; System.out.println(key + "=" + wt.getSystemProperty(key)); } public String getSystemProperty(String key) { Properties p = System.getProperties(); return p.getProperty(key); } }
このプログラムは、与えられたストリングの名前のシステム・プロパティを返すというプログラムである。このプログラムのgetSystemPropertyメソッドをWebサービス化してみる。このプログラムをコンパイルし、Webサーバの都合の良いクラスパスに置く。ここでは、C:\WebSphere\AppServer\classesに置いておくこととする。
コンパイルして実行すると次のようになるのを確認しておく。
C:\WebSphere\AppServer\classes>java WstkTest java.vm.vendor =IBM Corporation C:\WebSphere\AppServer\classes>java WstkTest java.version java.versionjava.version=1.2.2
SOAP-RPCとして公開するには、SOAPのrpcrouterに登録する必要がある。SOAPのrpcrouterに登録するには、Apache-SOAP形式のデプロイメント記述が必要である。また、外からアクセスすることを考え、WSDLを同時に生成する。
そのために、WSTKを導入したディレクトリのwstk\bin\wsdlgen.batを起動する。
最初にJavaBeans、EJB、COMの選択肢が出てくるので、JavaClassを選択して「Next」を押す。
次にクラスファイルを指定する画面6が出る。Class Name、Classpathを指定すると、ほかのフィールドは自動的に埋められる。下記に簡単なパラメータの説明をしておこう。
Class Name | クラス名 |
---|---|
Classpath | クラスを発見するためのクラスパス |
Output Filename | WSDLファイル名 |
画面下側の、サービス・プロパティ(Service Properties)には、WSDLの中身に埋められる内容が表示されている。特に「Binding URL」「WSDL URL prefix」に気をつけよう。Host:Port番号が「localhost:8080」になってしまうが、このまま使うには、Webサービスを実行するHTTPを8080で構成してやるか、トンネル・モニタ(WSTK付属のツール)でリダイレクトしてやる必要がある。また、ほかからアクセスするには都合が悪いので、この時点で「自分の固定ホスト名」に修正して使おう。単純にローカル環境で稼働確認をするのであれば、Port番号を削除してしまえばよい。これらの設定が終わったら「Next」ボタンを押す。
次の画面7では、メソッドの一覧が表示される。これは、どのメソッドをWebサービスとして公開するかを選択する画面だ。先ほどの「getSystemProperty(String)」を選択(反転表示)し、「Next」を押す。もちろん、ここで複数のメソッドを選択しても構わない。
この画面の次に「Finish」を押せば、これで、WSDL、デプロイメント記述が生成される。
生成されるWSDLファイルは2種類ある。サービス記述(WstkTest_Service.wsdl)とインターフェイス記述(WstkTest_Service-interface.wsdl)である。
インターフェイス記述には、DataTypes、Message、portTypes、bindingなどの要素が含まれ、提供するサービスが使うXMLメッセージの形式、トランスポートのバインディング情報が記述されている。サービス記述には、先程のインターフェイス情報を取り込む為のimport要素と、サービスを提供するURLなどを示すためのservice要素が含まれている。
インターフェース記述は、UDDIのtModelにURIとして登録されるし、サービス記述は、プロキシの生成やダイナミックバインディングを行うときのインプットにすることができる。また、次に出てくるWebサービス・ブラウザが、UDDIにbusinessServiceを登録するときに参照したりする。
Webサービスを利用可能にする前に、生成されたWSDLファイルをHTTPで公開しておく必要がある。これらのファイルは、http://hostname/wsdl/xxxxx.wsdl という名前で参照するようにURLが作られてしまうので、C:\IBM HTTP Server\htdocs\wsdlというディレクトリを作って、そこにコピーしておく。
出来上がったファイルをSOAPランタイムおよび、UDDIに登録することでWebサービスが利用可能になる。これをWeb Servicesアーキテクチャでは「パブリッシュ」と呼んでいる。パブリッシュする簡単な方法は、「Webサービス・ブラウザ」を使うことだ。WSTKのbinディレクトリの「browser.bat」を起動すると下記のような画面になる。
左側のペインにはUDDIレジストリのツリーが、右側に詳細が表示される。「Service Providers」と「Service interfaces」を選択して、「Find」ボタンを押すと、それぞれをUDDIに問い合わせに行き、表示してくれる(画面10はこの状態)。
今回のプログラムは、このUDDIでは初めてのインターフェイスなので、まずインターフェイスの登録を行おう。UDDIのルートを選択しておき、「New Service interface」を押す。
インターフェイス記述を示すWSDLファイルと、サービス・カテゴリを入力する画面11が出るので、インターフェイス定義のWSDLファイル「WstkTest_Service-interface.wsdl」を指定する。サービス・カテゴリは何でもよいので、「Add」を押して「Category Selection」ウィンドウを出し、「Select TModel Key」から「NAICS」を選択して適当に選ぶ(ここではリストの一番上にあった、「11111:Soybean Farming」(大豆農園)を選んだ)。
「Publish」ボタンを押すとUDDIにアクセスし、インターフェイス定義がパブリッシュされる。このとき、このWSDLのURI(tModelに記述される)を聞かれるので、「http://hostname/wsdl/WstkTest_Service-interface.wsdl」を入力する。こうすることで、このtModelを使う利用者がWSDLを参照することができる。この時点でこのWSDLは、UDDI上で標準のインターフェイス定義として登録されたことになる。このインターフェイスと同じ機能を提供する人は、常にこのtModelを使うべきである。同じインターフェイスの機能を提供する人は、新しくtModelを登録するべきでない。
UDDIにサービスを登録するには、そのサービスを提供する企業(ビジネス)を登録する必要がある。そこで、例として新しいビジネス「Yonechan」を登録していくことする(画面12)。
ビジネスの登録が終わったら、UDDIブラウザでService Providersフォルダを選択して「Find」ボタンを押すと、新規に登録された「Yonechan」が出てくるようになる(画面13)。
では、Yonechanを選択して、「New Service」を押し、サービスの追加を行ってみよう。左側にツリーが表示されるので、サービス記述WSDL「WstkTest_Service.wsdl」、およびデプロイメント記述「DeploymentDescriptor.xml」の順に探し出してダブルクリックすると、該当のフィールドが埋まる。SOAP-rpcrouterにも同時に登録できるので、「Deploy with SOAP Service Manager」をチェックしておく。Webサービス・カテゴリは、例によって「大豆農園」にしておこう(画面14)。
「Publish」を押すと、このサービスに対してのサービス記述WSDLのURLを聞いてくるので、「http://hostname/wsdl/WstkTest_Service.wsdl」を入力して「OK」を押す。
これで、サービスが公開できた。UDDIには、企業「Yonechan」がサービス「大豆農園」を行っており、サービス記述の内容がbusinessServiceに記述された。インターフェイス記述はtModelとして登録されている。
SOAP-RPCによるWebサービスは、見た目(いわゆるユーザーインターフェイス)が存在しない。そこで、プログラムを作ってこれにアクセスしてみることにする。ここからは、先ほどと違うマシンで作業していることにしていただきたい。(実際、別のマシンで稼働確認を行った。)先ほどの作業で、以下のものがサーバ上で提供されている。
さらに、UDDIには、
これらを使って、Webサービスとして提供されているgetSystemPropertyにアクセスしてみよう。
Copyright © ITmedia, Inc. All Rights Reserved.