レベル: 初級 米持 幸寿, テクノロジー・エバンジェリスト, IBM
2006年 4月 05日 この記事では、WSDL、すなわち抽象インターフェースを先に準備してWebサービスを作る手順を紹介します。このような手順を「トップダウン開発」と言います。ここでは、WID(IBMWebSphere Integrational Developer)のWSDLを使う手順として紹介しています。どこかのサイトで稼動しているWebサービスのWSDLを使って、同じ手順でWebサービスを作ることもできます。その場合は、外部のWSDLを取り込んだあと、手順4以降を行ってください。
WIDのビジネス・オブジェクト・エディター、およびインターフェース・エディターで作成するインターフェース定義は、それぞれXSD(XMLスキーマ・データタイプ)と、WSDL(Webサービス記述言語)にて作成されます。 このファイルをRationalのJ2EEツール(RWD、RAD、RSA)上のWebアプリケーション・プロジェクトに取り込むと、そのインターフェースを持ったWebサービスの雛形=スケルトンをウィザードで生成することができます。 作業のコツは、WSDLにbindingとservice要素を手作業で追加することです。WIDで作られたインターフェースは、抽象インターフェースであるためバインディングに関する情報を含んでいません。Webサービスのウィザードでは、サービス要素からたどってスケルトンを生成します。このため、binding要素とservice要素を追加してからウィザードにかける必要があります。 作業の流れを図1に示します。
図1 スケルトンWebサービスを生成する手順
1.インターフェース定義をする
ここでは、WID上のモジュール・プロジェクト「Hakozaki」に、ビジネス・オブジェクト「BookInfo」、およびインターフェース「BookSearcher」がすでに作成済みであることを前提に説明します。(図中作業1.1および1.2) ファイルを確認するには、JavaパースペクティブやWebパースペクティブのパッケージ・エクスプローラー・ビューで見ます。
図2 XSDファイルとWSDLファイル
このWSDLファイルには、binding要素とservice要素が入っていません。
2.WebプロジェクトにWSDLを取り込む
ここでは、インターフェースを定義したのと同じWID上で作業する手順を説明します。WIDに搭載されているWebサービスのウィザードは、RADなどに搭載されているものと同じものです。
2.1 Webプロジェクトを作る
ここでは、エンタープライズ・プロジェクト「ToyosuEAR」、Webプロジェクト「Toyosu」を作成しました。
図3.WSDLフォルダーを作成
2.2 WSDLフォルダーを作る
WSDLを取り込むためのフォルダーを準備します。WebContentの下に「WSDL」フォルダーを作成してください。
2.3 XSD、WSDLをコピー(インポート)する
プロジェクト・エクスプローラー・ビューなどの中では、モジュール・プロジェクトは「その他のプロジェクト」の中に見えます。必要となるXSDとWSDLを、先ほど作ったWSDLフォルダーへコピーしてください。(Ctl+ドラッグ&ドロップでもコピーできますが、間違って移動してしまわないようにご注意ください)
図4.WSDLファイルのコピー
既存のインターフェースなどがWebサイト上(スキーマ・レジストリーなど)に公開されている場合は、「インポート」機能でHTTP経由で取り込むこともできます。
3.WSDLにbindingとservice要素を追加する
3.1 WSDLをWSDLエディターで開く
WSDLファイルを右クリックし、「アプリケーションから開く」-「WSDLエディター」を選択します。WSDLエディターが表示されない場合は、「ウィンドウ」-「設定」を開き、左側のツリーで「ワークベンチ」-「機能」を選択後、「Webサービス・デベロッパー」にチェックを入れて「OK」ボタンをクリックしてください。
図6.WSDLエディターで開く
3.2 bindingおよびservice要素を追加する
SOAP-HTTPで公開されるためのbindingとservice要素を追加しましょう。WSDLエディターでは、WSDLの要素ごとに枠が表示され、定義されている要素が表示されています。WSDLエディターでは、各枠の上で右クリックすることで要素を追加することができます。
まず、binding要素を追加します。「バインディング」のラベルがついた枠内で右クリックし、「バインディングの追加」を選択します。
図7.binding要素の追加
Bindingウィザードでは、適宜名前をつけ(ここでは「SOAPHTTPBinding」)、ポートタイプを選択し、プロトコルに「SOAP」を選択します。
図8.バインディングの指定
次に、同様の手順でservice要素を追加します。
図9.service要素の追加
>
service要素には名前のみを指定します。
図10.service要素の指定
次に、今追加したservice要素を右クリックして、「ポートの追加」を選択してPortを追加します。
図11.Portの追加
名前を適宜修正し(ここではSOAPHTTPPort)、Bindingに先ほど作成したものを指定して、プロトコルに「SOAP」を選択します。その下のLocationは、このあとのWebサービス・ウィザードで適宜変更されますので、触る必要はありません。
図12.ポートの設定
作成したservice、port、bindingが結合されていることを確認してください。
図13.作成されたserviceとbinding要素
ファイルを保存して閉じてください。
トラブル情報
ここで、WSDLがエラーになることがあります。理由は、いくつかの子を持つことができない要素があり、その要素を一組の開始タグと終了タグで生成するのですが、WSDLエディターの(正確にはXMLエディター)の機能で改行とタブが自動挿入され、それが検査にひっかかるためです。(タグの間に入る改行とタブは、テキスト要素とみなされます)
図14.WSDLのエラー
次の手順で修正してください。
- WSDLファイルをWSDLエディターで開いてください。
- エラーになっている要素を
<soap:binding ..... ></soap:binding>形式から <soap:binding ..... />形式 に書き直します。binding、operation、bodyがエラーになっているはずです。
4.サービスのスケルトンを生成する
4.1 ファイルを右クリックする
エクスプローラー上で、WSDLファイルを右クリックしてください。
4.2 新規→Webサービスを選択する
「新規」-「その他」を選択し、「ウィザード」の中からWebサービスを選択します。
4.3 スケルトンWebサービスを選択する
「Webサービス・タイプとして「スケルトンJava bean Webサービス」が選択されていることを確認してください。
図15.スケルトンWebサービスの選択
あとのオプションは適宜選択してください。ここでは、プロキシーを生成する設定、テストを行う設定などをセットしています。
図16.ウィザード処理が終了したところ
このWebサービスの処理を行うモジュール(エンドポイント・モジュール)は、「SOAPBindingImpl.java」です。ソースコード1のようなコードを書き込んで、テストクライアントからWebサービスを呼び出すと、コンソールに結果が表示されます。
ソースコード1.実装コード
public class SOAPHTTPBindingImpl implements Hakozaki.BookSearcher{
public java.lang.String registerBook(Hakozaki.BookInfo bookInfo)
throws java.rmi.RemoteException {
return null;
}
public Hakozaki.BookInfo getBook(java.lang.String isbn) throws
java.rmi.RemoteException {
return null;
}
}
|
著者について  | |  | 1987年に日本アイ・ビー・エム入社。メインフレームOS、ミドルウェアの障害対応、障害解析ソフトウェアの開発、ワークフローシステム開発、オブジェクト指向開発、Web開発など経験。2000年より、ソフトウェアのテクノロジーエバンジェリストとして活動中。 |
記事の評価
|