Apache Software Foundationに対するIBMのWSIL4J APIの寄与により、サービス・ディスカバリーを実行するために必要なアプリケーションを作成する作業が容易になります。この記事では、WSIL4J APIの威力を発揮するWSIL Loaderというサンプル・アプリケーションを紹介します。
WSIL Loaderを調べることで、WSIL検査文書のURLを入力として受け取り、WSIL文書の内容に基づいてWSDLのテーブルを表示する、JSP/サーブレットのコードの書き方がわかるはずです。生成されるテーブルには3つの列があり、名前、要約、発見されたさまざまなサービスの場所がリスト表示されます。各列は、ロードされたWSIL検査文書に対応する要素がある場合にだけ表示されます。場所の列には、渡されたWSIL検査文書の参照に収められていたWSDLドキュメントへのハイパーリンクが表示されます。
メモ: 記事の最後にある参考文献 からは、この記事のサンプル・コードをダウンロードでき、他の役に立つリンクも参照できます。
図1 は、クライアント (Webブラウザー) とwsdlTableGenerator JavaServer Page (JSP) の間、およびこのJSPとInspectionHandlerServlet の間の情報フローを表したものです。JSPを要求すると、クライアントには図2 に示すページが表示されます。ユーザーは、WSIL検査文書の有効なURLを入力します。制御はInspectionHandlerServlet に移り、このサーブレットは必要な情報を提供して、制御をJSPに戻します。JSPは情報を処理し、図3 に示すページを生成します。
エラー処理のメカニズムを集中化してわかりやすくするため、エラー処理はerrorPage.jsp を呼び出して行います。その結果、エラー・ページがクライアントに送信されます。
図1. WSIL Loaderアプリケーションの情報フロー
図2. WSIL Loaderの初期ページ
図3. WSIL Loaderが表示するWSDLのテーブル
InspectionHandlerServlet
のコードをダウンロードしてください。すべてのアクションは、doPost() メソッドで発生します。理解しやすいように、このコードについて少し詳しく見ていきます。
最初に、受け取ったHTTPリクエストから取得したWSIL文書のURLを使って、WSILProxy オブジェクトを作成します。このオブジェクトは、リスト1 に示すように、渡されるWSIL検査文書を解析し、WSIL文書オブジェクトの取得に備えます。
リスト1. WSIL文書オブジェクトの作成
// Create WSIL proxy
WSILProxy wsilProxy = new WSILProxy(req.getParameter(INSPECTION_URL));
// Create a new WSIL document
wsilDoc = wsilProxy.getWSILDocument();
|
次に、サービス名、サービスの要約、およびWSDL文書の場所に関する情報を、WSIL文書オブジェクトに照会する必要があります。返された情報は、さらに検索できるよう、HttpServletRequest クラスのインスタンスに格納します。リスト2 は、これらのメソッド呼び出しを示したものです。
リスト2. WSIL検査データの取得
// Set service names
req.setAttribute(SERVICE_NAMES, getAllWSDLServiceNames(wsilDoc));
// Set abstracts
req.setAttribute(ABSTRACTS, getAllAbstracts(wsilDoc));
// Set locations
req.setAttribute(LOCATIONS, getAllWSDLLocations(wsilDoc));
|
リスト3 に示すように、その後制御はwsdlTableGenerator.jsp のコードに戻ります。
リスト3. JSPコードの制御の移動
// Transfer control
RequestDispatcher rd = req.getRequestDispatcher(JSP_VIEWER);
rd.forward(req, res);
|
リスト4 は、errorPage.jsp コードに制御を移すことでエラーを処理する方法を示しています。
リスト4. エラー処理
req.setAttribute("javax.servlet.jsp.jspException", t);
// Transfer control to Error page
RequestDispatcher rd = getServletContext().getRequestDispatcher(ERROR_PAGE);
rd.forward(req, res);
|
wsdlTableGenerator.jsp
をダウンロードしてください。このコードは、InspectionHandlerServlet によって送信されたHTTP要求から、目的の要素であるサービス名、サービスの要約、およびWSDLの場所を抽出します。ロジックにより、実際に存在する要素を調べられた後、for ループで、入手可能な列を含むテーブルが作成されます。
WSIL Loaderアプリケーションは、IBM Web Services Toolkit (WSTK、詳細については参考文献 を参照) の一部として利用できます。WSTKをインストールして構成すれば、以下の手順でWSIL Loaderを起動して実行できます。
- Tomcatを起動します。
- Webブラウザーで
http://localhost:8080/wstk/wsilLoader/wsdlTableGenerator.jspにアクセスします。localhostとポート番号は、必要に応じて、ツールキットの構成時に選択した値に置き換えます。 - 検査文書のURL (
http://www.xmethods.net/inspection.wsilなど) を入力するか、またはデフォルト値を使用します。ツールキットで利用可能なWSDL文書を含むテーブルが生成されます。 - "Location" 列のエントリーを選択すると、対応するWSDL文書がロードされます。
ここで検討したサンプル・アプリケーションを見れば、WSIL4J APIを使用したWSIL文書の処理がどれほど簡単かおわかりいただけることでしょう。結果として、サービス・ディスカバリー・プロセスも非常に簡単にインプリメントできるようになります。
読者自身の作業でこのコードを自由にお使いください。このコードを使うと、文書に含まれる情報がテーブル形式にまとめられるので、未知のWSILを扱うときの便利さがわかると思います。最も意味のある検査データであるサービス名、サービスの要約、そして関連するWSDL文書のURLの場所が、完全に公開されます。URLの場所は、関連するWSDL文書へのハイパーリンクとしても表示されます。これにより、WSIL検査文書によって提供される検査機能が一層拡張されます。
ほかに役に立つ記事やツールがありましたら、IBMのWebサービス・チームまでぜひご連絡ください。WSTKページおよびプロジェクト・チームへのフィードバック・フォームへのリンクは、参考文献のセクションに示されています。
- この記事で紹介されている2つのコード・ファイル
InspectorHandlerServlet.javaとwsdlTableGenerator.jspをダウンロードしてください。 - alphaWorksからIBM Web Services Toolkit をダウンロードしてください。
- WSTKの最新バージョンの詳細については、developerWorksでJames SnellによるWSTKチュートリアルの
第1回と
第2回を読んでください。
-
WSDL 1.1の仕様には、WSDL文書の構造についての情報が含まれています。
-
Web Services Inspection Language (WS-Inspection) の仕様は、developerWorksのサイトにあります。
-
IBMのWebサービスのページをご覧ください。

Alfredo da SilvaはIBMのソフトウェア開発者です。彼は、IBM Web Services Toolkit (WSTK) を担当するグループのメンバーです。Alfredoの連絡先は、afdasilv@us.ibm.com です。