Interstage Studio プログラマーズガイド
目次 索引 前ページ

付録A Interstage Application Server V9.0.1以降で動作するJ2EEアプリケーションを開発する

A.3 J2EE1.4 Webサービスクライアントアプリケーションの開発方法

Webアプリケーション、EJBアプリケーションまたはJ2EEアプリケーションクライアントからWebサービスを呼び出す場合、JNDIを使用してServiceオブジェクトをlookupすることができます。

deployment descriptorの編集

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

[Webアプリケーション(web.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 WebSercie</description>
               <service-ref-name>service/WordServer</service-ref-name>
               <service-interface>sample.WordServerService</service-interface>
      </service-ref>
</web-app>

deployment descriptorのタグの詳細は、Interstage Application Server V9.0.1以降の"Interstage Application Server J2EEユーザーズガイド"を参照してください。

Webサービスクライアントアプリケーションの作成

[Webサービスクライアント]ウィザードを利用することで、WSDLファイルからWebサービスクライアントアプリケーションを作成することができます。
Webサービスクライアントアプリケーションの作成については、"Webサービスクライアントアプリケーションを作成する"を参照してください。

Serviceオブジェクトを取得してスタブからWebサービスにアクセス

JNDIを使用してServiceオブジェクトを取得して、スタブからWebサービスにアクセスします。

  1. InitialContextオブジェクトを生成する
    InitialContextオブジェクトを新規に生成します。

  2. Serviceオブジェクトを取得する
    取得したInitialContextオブジェクトのlookupメソッドを使用して、Serviceオブジェクトを取得します。
    lookupの引数には、以下の文字列を指定します。
    java:comp/env/[deployment descriptorの<service-ref-name>に指定した値]
  3. スタブオブジェクトを取得する
    取得したServiceオブジェクトのメソッドを使用し、スタブオブジェクト(サービスエンドポイントインタフェースを実装したクラスのインスタンス)を取得します。

  4. スタブオブジェクトのメソッドを呼び出す
    取得したスタブオブジェクトのメソッドを呼び出し、Webサービスにアクセスします。

[JNDIを使用したスタブの取得例]

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/WordServerService");
            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 V9.0.1以降の"Interstage Application Server J2EEユーザーズガイド"を参照してください。

目次 索引 前ページ

All Rights Reserved, Copyright (C) 富士通株式会社 1998-2007