| Interstage Studio プログラマーズガイド |
目次
索引
![]()
|
| 第2部 Java編 | > 第5章 Webサービスアプリケーションを開発する | > 5.2 開発の流れ |
ここでは、Webサービスクライアントアプリケーションを作成する手順について、ワークベンチの使い方を中心に説明します。

Webサービスクライアントアプリケーションを作成する場合には、ビルドパスにInterstage J2EEライブラリを追加する必要があります。
また、WebサービスクライアントアプリケーションをJ2EEアプリケーションクライアントなどのJavaアプリケーションとして動作させる場合には、Interstage J2EEライブラリの追加において"J2EEアプリケーションクライアントからWebサービスを呼び出す"を選択することで、実行確認まで行うことができます。
Webサービスクライアントを作成するにはWSDLファイルが必要です。
Interstage Application ServerのWebサービスの場合、Interstage管理コンソールのワークユニット > "IJServer名" > [アプリケーション状態/配備解除]タブでWebモジュールを選択して、[Webサービス環境定義]タブよりそのWebサービスの公開用WSDLを取得できます。
Webサービスの開発資産がある場合には、開発資産のWSDLを利用することもできます。

WSDLから生成されるファイルには、WSDLファイルに記述されているlocation情報(接続先のWebサービスのURL)が出力されます。運用環境を変更する場合などのため、アプリケーションを再構築することなく、環境設定で接続先を変更することは可能ですが、利用するWebサービスのlocation情報が記述されているWSDLファイルを使うと手間がかかりません。
Interstage管理コンソールより取得できる公開用WSDLファイルは、取得時に配備先の環境に合わせてWSDLファイルのlocation情報が更新されており、これを使用すると接続先についてユーザが意識する必要はありません。
ただし、Webサービスアプリケーションの開発も同時に行うような場合には、デバッグ環境のlocation情報をWebサービスウィザードで指定しておくことで、配備などの作業を行わずに、開発資産のWSDLファイルをそのまま使うことができ、WebサービスアプリケーションとWebサービスクライアントの開発を平行して行うことができます。
WebサービスクライアントがJ2EEアプリケーションで、サービスインタフェースをJNDIのlookupを利用して取得する場合は、WSDLファイルに記述されているlocation情報を意識する必要はありません。
Webサービスクライアントウィザードにより、WSDLファイルからからWebサービスクライアントアプリケーションに必要なファイルを生成することができます。

Webサービスクライアントウィザードを使用するには、Interstage Application Server機能またはInterstage Application Serverクライアントパッケージをインストールしておく必要があります。
Webサービスクライアントウィザードは、以下の手順で起動します。
J2EEパースペクティブから操作する場合:
その他のパースペクティブから操作する場合:
Webサービスクライアントウィザードの詳細については、"Interstage Studioユーザーズガイド"を参照してください。
以下にWebサービスクライアントウィザードで生成されるファイルを示します。
|
生成ファイル |
ファイル名 |
内容 |
|---|---|---|
|
サービスエンドポイントインタフェース |
<WSDLのportType名>.java |
利用するWebサービスエンドポイントのインタフェース定義をJavaのインタフェースで記述したものです。 |
|
サービスインタフェース |
<WSDLのservice名>.java |
Webサービスに含まれるWebサービスエンドポイントのスタブを取得するためのインタフェースです。 |
|
ユーザ定義型クラス |
xxxxx.java |
ユーザ固有の型をWebサービスで利用している場合に生成されます。 |
|
Holderクラス |
xxxxxHolder.java |
パラメタがoutやinout型の場合で、ユーザ固有の型や配列など標準のHolderクラスが無い場合に生成されます。 |
|
その他のクラス |
_isws_ + XXXXX +.java |
Webサービスクライアントの実行に必要なクラスです。アプリケーションでこれらのクラスを意識して使用する必要はありません。 |

ファイル生成時のWSDLのXML型からJava型の変換規則については、"Interstage Application Server J2EEユーザーズガイド"を参照してください。

Webサービスアプリケーションも作成している場合、Webサービスアプリケーション時に作成したサービスエンドポイントインタフェースと、Webサービスクライアント時にWSDLファイルから生成したサービスエンドポイントインタフェースは同一であるとは限りません。そのため、Webサービスクライアントの開発ではWSDLファイルから生成したものを使用してください。
生成されたスタブなどを利用してWebサービスにアクセスするには、スタブを取得し、スタブのメソッドを呼び出します。
スタブを取得するには、以下の方法があります。
Webアプリケーション、EJBアプリケーションまたはJ2EEアプリケーションクライアントからWebサービスを呼び出す場合、JNDIを使用してServiceオブジェクトをlookupすることができます。
WebサービスクライアントアプリケーションからJNDIを使用してServiceオブジェクトをlookupする場合、クライアントアプリケーションの形態に応じて以下のdeployment descriptorにservice reference記述を定義する必要があります。
|
クライアントアプリケーションの形態 |
deployment descriptor |
|---|---|
|
WebアプリケーションからServiceオブジェクトをlookupする場合 |
web.xml |
|
EJBアプリケーションからServiceオブジェクトをlookupする場合 |
ejb-jar.xml |
|
J2EEアプリケーションクライアントからServiceオブジェクトをlookupする場合 |
application-client.xml |
<?xml version="1.0" encoding="UTF-8" ?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>WordServer</display-name>
・・・
<service-ref>
<description>WSDL Service WebService</description>
<service-ref-name>service/WordServer</service-ref-name>
<service-interface>sample.WordServerService</service-interface>
</service-ref>
</web-app>

<service-ref>タグについては、DDエディタのGUI画面での編集ができないため、[ソース]タブを選択して、XMLを直接追加、更新するか、[Interstage Studioテンプレート]のテンプレートビューからタグを挿入してから値を更新してください。
deployment descriptorのタグの詳細は、"Interstage Application Server J2EEユーザーズガイド"を参照してください。
JNDIを使用してServiceオブジェクトを取得して、スタブからWebサービスにアクセスします。
java:comp/env/[deployment descriptorの<service-ref-name>に指定した値]
package sample;
import java.rmi.RemoteException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.xml.rpc.ServiceException;
import javax.xml.rpc.holders.StringHolder;
public class WordClient {
public WordClient() {
}
public void run(String[] args) {
try {
InitialContext ic = new InitialContext();
WordServerService service = (WordServerService)ic.lookup("java:comp/env/service/WordServer");
WordServer wordServer = service.getWordServerPort();
String param1 = "Test is OK" ;
StringHolder param2 = new javax.xml.rpc.holders.StringHolder("") ;
int wordNumber = wordServer.countWord(param1,param2) ;
System.out.println("word number " + wordNumber) ;
System.out.println("words " + param2.value) ;
} catch (RemoteException e) {
e.printStackTrace();
} catch (ServiceException e) {
e.printStackTrace();
} catch (NamingException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
WordClient object = new WordClient();
object.run(args);
}
}

JNDIを利用してServiceオブジェクトをlookupする場合は、単一のInitialContextオブジェクトを複数のスレッドで使用することはできません。

J2EEアプリケーションクライアントからJNDIを使用する場合は、JNDIサービスプロバイダの環境設定をする必要があります。JNDIサービスプロバイダの環境設定については、"Interstage Application Server J2EEユーザーズガイド"を参照してください。
package sample;
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import javax.xml.rpc.ServiceFactory;
import javax.xml.rpc.holders.StringHolder;
public class WordClient {
public WordClient() {
}
public void run(String[] args) {
try {
ServiceFactory serviceFactory = ServiceFactory.newInstance();
WordServerService service = (WordServerService)serviceFactory.loadService(WordServerService.class);
WordServer wordServer = service.getWordServerPort();
String param1 = "Test is OK" ;
StringHolder param2 = new javax.xml.rpc.holders.StringHolder("") ;
int wordNumber = wordServer.countWord(param1,param2) ;
System.out.println("word number " + wordNumber) ;
System.out.println("words " + param2.value) ;
} catch (RemoteException e) {
e.printStackTrace();
} catch (ServiceException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
WordClient object = new WordClient();
object.run(args);
}
}
使用するメソッドの詳細は、"Interstage Application Server J2EEユーザーズガイド"およびWebサービス関連のjavadocを参照してください。
目次
索引
![]()
|