BEA ホーム | 製品 | dev2dev | support | askBEA
 ドキュメントのダウンロード   サイト マップ   Glossary 
検索

WebLogic Web サービス プログラマーズ ガイド

 Previous Next Contents PDF で侮ヲ  

Web サービスの呼び出し

この章では、クライアント アプリケーションから WebLogic および非 WebLogic の Web サービスを呼び出す方法について説明します。

 


Web サービスの呼び出しの概要

Web サービスの呼び出しは、クライアント アプリケーションが Web サービスを使用するために実行するアクションです。 Web サービスを呼び出すクライアント アプリケーションは、Java、Microsoft SOAP Toolkit、Microsoft .NET などの任意のテクノロジを使用して記述できます。

注意: この章では、クライアント アプリケーションという用語を、WebLogic シン クライアントを使用して Web サービスを呼び出すスタンドアロン クライアントと、WebLogic Server で実行されている EJB の内部で動作しているクライアントの両方の意味で使用しています。

以降の節では、JAX-RPC 仕様の BEA の実装を使用して Java クライアント アプリケーションから Web サービスを呼び出す方法について説明します。WebLogic Web サービスとそのホーム ページを呼び出すのに必要な URL についての節を除いては、WebLogic Server で実行されている Web サービスに限らず、あらゆる Web サービスを呼び出す場合を想定しています。

WebLogic Server では、Web サービスの呼び出しに必要なすべてのクラス、インタフェース、およびスタブが含まれたオプションの Java JAR ファイルを提供しています。クライアント JAR ファイルには、特定の Web サービスの呼び出しに必要な Java コードの量を最小化するための Web サービス固有の実装のほか、webserviceclient.jar および webserviceclient+ssl.jar と呼ばれる JAX-RPC 仕様のクライアント実行時実装も含まれています。

JAX-RPC API

JAX-RPC (Java API for XML based RPC) は Sun Microsystems の仕様で、Web サービスを呼び出すクライアント API を定義します。

次の表で、JAX-RPC の中心的なインタフェースとクラスを簡単に説明します。

表8-1 JAX-RPC のインタフェースとクラス

javax.xml.rpc のインタフェースまたはクラス

説明

Service

主要なクライアント インタフェース。静的、動的呼び出しの両方で使用する。

ServiceFactory

Service インスタンスの生成に使用するファクトリ クラス。

Stub

Web サービスのオペレーションを呼び出すためのクライアント プロキシを表す。通常は、Web サービスの静的呼び出しに使用する。

Call

Web サービスを動的に呼び出すのに使用する。

JAXRPCException

Web サービスの呼び出し中にエラーが発生した場合に送出される例外。

WebLogic Server には、JAX-RPC 仕様の実装が組み込まれています。

JAX-RPC の詳細については、以下の Web サイトを参照してください。http://java.sun.com/xml/jaxrpc/index.html

JAX-RPC を使用して Web サービスを呼び出す方法に関するチュートリアルについては、http://java.sun.com/webservices/docs/ea1/tutorial/doc/JAXRPC.html を参照してください。

Web サービスを呼び出すクライアントの例

WebLogic Server の WL_HOME/samples/server/src/examples/webservices ディレクトリには、WebLogic Web サービスの作成および呼び出しの方法として以下の例があります。WL_HOME は、WebLogic プラットフォームのメイン ディレクトリです。

上記の例の構築と実行についての詳細な説明は、次の Web ページを参照してください。

WL_HOME/samples/server/src/examples/webservices/package-summary.html

WebLogic Web サービスの作成と呼び出しの例は、このほかにも、Web Services dev2dev Download Page の Web サービスのページに掲載されています。

 


Web サービスを呼び出す Java クライアント アプリケーションの作成 : 主な手順

Web サービスを呼び出す Java クライアント アプリケーションを作成するには、次の手順に従います。

  1. WebLogic Server にある Java クライアント JAR ファイルを取得して、CLASSPATH に追加します。

    クライアント アプリケーションが WebLogic Server で実行されている場合は、この手順は省略することができます。

    注意: クライアント機能に関する現在の BEA のライセンス供与については、Web サイト BEA eLicense を参照してください。

    詳細については、Java クライアント アプリケーション JAR ファイルの取得を参照してください。

  2. Java クライアント アプリケーションのコードを記述します。

    さまざまなクライアント アプリケーション (静的、動的、など) の記述方法の詳細については、Java クライアント アプリケーションのコードの記述J2ME クライアントの記述を参照してください。

  3. Java クライアント アプリケーションをコンパイルし、実行します。

 


Java クライアント アプリケーション JAR ファイルの取得

WebLogic Server は、以下のクライアント JAR ファイルを提供しています。

クライアント機能に関する現在の BEA のライセンス供与については、Web サイトBEA eLicense を参照してください。

クライアント JAR ファイルを取得するには、次の手順に従います。

  1. WL_HOME¥server¥lib¥webserviceclient.jar ファイルを、クライアント アプリケーション開発用のコンピュータにコピーします。WL_HOME は、WebLogic プラットフォームの最上位ディレクトリです。この JAR ファイルには、JAX-RPC のクライアント実行時実装が入っています。

    注意: SSL を使用して Web サービスの安全性を確保する場合および WebLogic Server が提供するクライアント クラスの SSL 実装を使用する場合は、WL_HOME¥server¥lib¥webserviceclient+ssl.jar ファイルをクライアント アプリケーション開発用のコンピュータにコピーします。この JAR ファイルには、SSL 実装のほか、webserviceclient.jar にあるのと同じクライアント ファイルも入っています。

    SSL を使用する J2ME クライアントを記述する場合は、ファイル WL_HOME¥server¥lib¥webserviceclient+ssl_pj.jar をクライアント アプリケーションのコンピュータにコピーします。

  2. clientgen Ant タスクを実行して Web サービス固有クライアント JAR ファイルを生成します。

    wsdl 属性を指定して、任意の (非 WebLogic Web サービスも含めた) Web サービス用の JAR ファイルを作成します。あるいは、WebLogic Web サービスの場合は、EAR ファイルにパッケージ化されている ear 属性を指定します。

    clientgen Ant タスク実行の詳細および例については、clientgen Ant タスクを実行するを参照してください。 リファレンス情報については、Web サービス Ant タスクとコマンドライン ユーティリティ.を参照してください。

    注意: WebLogic Web サービスを呼び出すクライアント アプリケーションを作成する際、クライアント JAR ファイルをホーム ページからダウンロードすることもできます。 詳細については、WebLogic Web サービスのホーム ページおよび WSDL の URLを参照してください。

  3. クライアント JAR ファイルをクライアント コンピュータに配置し、そのファイルを見つけるための CLASSPATH 環境変数を更新します。

clientgen Ant タスクを実行する

clientgen Ant タスクを実行し、クライアント JAR ファイルを自動的に生成するには、次のように行います。

  1. clientgen Ant タスクへの呼び出しの入った build.xml というファイルを作成します。 詳細については、clientgen Ant タスクのサンプル build.xml ファイル.を参照してください。

  2. 環境を設定します。

    Windows NT では、setWLSEnv.cmd コマンドを実行します。WL_HOME¥server¥bin ディレクトリにあります。WL_HOME は WebLogic プラットフォームがインストールされている最上位ディレクトリです。

    UNIX では、setWLSEnv.sh コマンドを実行します。WL_HOME/server/bin ディレクトリにあります。WL_HOME は WebLogic プラットフォームがインストールされている最上位ディレクトリです。

  3. build.xml ファイルと同じディレクトリで ant と入力し、Ant タスクまたは build.xml ファイルで指定されたタスクを実行します。
    prompt> ant

clientgen Ant タスクのリファレンス情報については、clientgenを参照してください。

clientgen Ant タスクのサンプル build.xml ファイル

以下に、簡単な build.xml ファイルの例を示します。

<project name="buildWebservice" default="generate-client">
<target name="generate-client">
<clientgen wsdl="http://example.com/myapp/myservice.wsdl"
packageName="myapp.myservice.client"
clientJar="c:/myapps/myService_client.jar"
/>
   </target>
</project>

この例では、clientgen タスクは、http://example.com/myapp/myservice.wsdl WSDL ファイルで記述されている Web サービスを呼び出すクライアント JAR ファイル (c:/myapps/myService_client.jar) を作成します。インタフェースとスタブ ファイルは myapp.myservice.client にパッケージ化されます。

 


Java クライアント アプリケーションのコードの記述

以下の節では、Java コードがほとんど不要な簡素な静的クライアントから、out パラメータを使用する比較的複雑なクライアントまで、Web サービスの呼び出しに使用されるさまざまな Java クライアント アプリケーションの記述方法について説明します。

すべての例で JAX-RPC API が使用されていて、BEA が提供する必要なクライアント JAR ファイルが CLASSPATH に追加されていることを前提としています。

Web サービスについての情報を取得

通常、クライアント コードの記述に先立って、Web サービスの名前とオペレーションのシグネチャを知る必要があります。

Web サービスの WSDL を参照してください。Web サービスの名前は、次の、TraderService WSDL の例に示すように、<service> 要素にあります。

  <service name="TraderService">
<port name="TraderServicePort"
binding="tns:TraderServiceSoapBinding">
...
</port>
</service>

この Web サービス用に定義されているオペレーションは、対応する<binding> 要素の下に記述されています。たとえば、次の WSDL の抜粋は、TraderService Web サービスには、buysell の 2 つのオペレーションがあることを示しています (わかりやすくするため、WSDL の関連部分のみを記載しています)。

  <binding name="TraderServiceSoapBinding" ...>
...
<operation name="sell">
...
</operation>
<operation name="buy">
</operation>
</binding>

Web サービスのオペレーションのフル シグネチャを調べるには、Web サービス固有クライアント JAR ファイル (clientgen Ant タスクを使用して生成されています) を unJAR して、*.java ファイルそのものを調べてください。ServiceNamePort.java ファイルには、Web サービスのインタフェース定義があります。ServiceName はWeb サービスの名前です。たとえば、buy および sell オペレーションのシグネチャは、TraderServicePort.java ファイルにあります。

HTTP セッションの維持

クライアント アプリケーションが Web サービスのエンドポイントとの HTTP セッションに参加するかどうかを指定するには、アプリケーションで次のプロパティを設定します。

javax.xml.rpc.Call.SESSION_MAINTAIN_PROPERTY

クライアント アプリケーションが WebLogic Web サービスを呼び出すと、まず内部サーブレットが要求を処理し、クライアントごとに HttpSession オブジェクトを作成します。この HttpSession オブジェクトの有効期間は、標準の J2EE ガイドラインに従います。HttpSession オブジェクトの詳細については、「サーブレットからのセッション トラッキング」を参照してください。

Web サービスがクラッシュした場合の処理

WebLogic のクライアント JAR ファイルを使用しているクライアント アプリケーションは、Web サービスを最初に呼び出したときにその Web サービスが動作しているコンピュータの IP アドレスをキャッシュします。デフォルトでは、ここでキャッシュされたアドレスは新しく DNS がルックアップされるまでリフレッシュされません。そのため、Web サービスを呼び出した後にその Web サービスが動作しているコンピュータがクラッシュし、別の IP アドレスを持つ他のコンピュータでその機能を引き継いだ場合に、同じクライアント アプリケーションから再び Web サービスを呼び出そうとすると、呼び出しは失敗します。クライアント アプリケーションでは、以前にキャッシュした IP アドレスを持つコンピュータで引き続き Web サービスが動作していると見なすためです。つまり、新規に DNS をルックアップして再度 IP アドレスを解決しようとはせず、以前のルックアップでキャッシュされた情報を使用します。

この問題を解決するには、クライアント アプリケーションを更新して、JDK 1.4 のシステム プロパティの sun.net.inetaddr.ttl に、アプリケーションが IP アドレスをキャッシュしておく秒数を設定します。

警告: この解決策はクライアント アプリケーションがスタンドアロンの場合にのみ有効です。クライアント アプリケーションが WebLogic Server 7.0 で動作している場合には、このプロパティを設定できません。このシステム プロパティは JDK バージョン 1.4 にのみ存在しており、WebLogic Server 7.0 ではバージョン 1.3.1 を使用しているためです。

簡素な静的クライアントの記述

動的クライアントの場合は、Web サービスのオペレーションとパラメータを間接的に参照しますが、静的クライアント アプリケーションを使用して Web サービスを呼び出す場合は、タイプ分けされた Java インタフェースを使用します。動的クライアントの使用は、Java reflection API を使用してメソッドを検索して呼び出すことに似ています。

Web サービスを静的に呼び出す場合は、Web サービス固有クライアント JAR を CLASSPATH に追加する必要があります。この JAR ファイルには、以下のクラスとインタフェースが入っています。

以下のコードは、サンプルの TraderService Web サービスを呼び出すクライアント アプリケーションを記述する例です。この例では、TraderService はスタブ ファクトリで、TraderServicePort はスタブそのものです。

package examples.webservices.complex.statelessSession;
/**
* このクラスは、JAX-RPC API を使用して TraderService Web サービスを呼び出し、
* 以下のタスクを行う方法を示す
* <ul>
* <li> 株を 100 株購入する
* <li> 株を 100 株売却する
* </ul>
*
* TraderService Web サービスは、
* ステートレス セッション EJB を使用して実装される
*
* @author Copyright (c) 1998-2002 by BEA Systems, Inc. All Rights Reserved.
*/
public class Client {
  public static void main(String[] args) throws Exception {
    //グローバルな JAXM メッセージ ファクトリをセットアップする
System.setProperty("javax.xml.soap.MessageFactory",
"weblogic.webservice.core.soap.MessageFactoryImpl");
//グローバルな JAX-RPC サービス ファクトリをセットアップする
System.setProperty( "javax.xml.rpc.ServiceFactory",
"weblogic.webservice.core.rpc.ServiceFactoryImpl");
    //引数リストの解析
Client client = new Client();
String wsdl = (args.length > 0? args[0] :null);
client.example(wsdl);
}
  public void example(String wsdlURI) throws Exception {
    TraderServicePort trader = null;
if (wsdlURI == null) {
trader = new TraderService_Impl().getTraderServicePort();
} else {
trader = new TraderService_Impl(wsdlURI).getTraderServicePort();
}
String [] stocks = {"BEAS", "MSFT", "AMZN", "HWP" };
      //購入の実行
for (int i=0; i<stocks.length; i++) {
int shares = (i+1) * 100;
log("Buying "+shares+" shares of "+stocks[i]+".");
TradeResult result = trader.buy(stocks[i], shares);
log("Result traded "+result.getNumberTraded()
+" shares of "+result.getStockSymbol());
}
//売却の実行
for (int i=0; i<stocks.length; i++) {
int shares = (i+1) * 100;
log("Selling "+shares+" shares of "+stocks[i]+".");
TradeResult result = trader.sell(stocks[i], shares);
log("Result traded "+result.getNumberTraded()
+" shares of "+result.getStockSymbol());
    }
  }
  private static void log(String s) {
System.out.println(s);
}
}

上記の例で注目すべき主な点は以下のとおりです。

WSDL を使用する動的クライアントの記述

WSDL を使用する動的クライアントを作成するときは、まず、ServiceFactory.newInstance() メソッドを使用してサービス ファクトリを作成します。次に、そのファクトリから Service オブジェクトを作成し、それに WSDL および呼び出そうとする Web サービスの名前を渡します。次に、Serviceから Call オブジェクトを作成し、ポートの名前と実行しようとするオペレーションを渡し、最後に Call.invoke() メソッドを使用して、Web サービスのオペレーションを実際に呼び出します。

動的クライアントを記述するときは、clientgen Ant タスクを使用して生成された Web サービス固有クライアント JAR ファイルは使用しません。この JAR ファイルは静的クライアント専用です。ただし、WebLogic の JAX-RPC 仕様の実装が入った JAR ファイルは、CLASSPATH に含める必要があります。これらの JAR のファイルの詳細については、Java クライアント アプリケーション JAR ファイルの取得を参照してください。

たとえば、WSDL を使用して次の URL にある Web サービスを呼び出す動的クライアント アプリケーションを作成するとします。

http://services.xmethods.net/soap/urn:xmethods-delayed-quotes.wsdl

以下の Java コードは、その 1 つの方法を示しています。

/**
* このクラスは、Web サービスを呼び出す Java クライアントを示す
*
* @author Copyright (c) 2002 by BEA Systems, Inc. All Rights Reserved.
*/
import java.net.URL;
import javax.xml.rpc.ServiceFactory;
import javax.xml.rpc.Service;
import javax.xml.rpc.Call;
import javax.xml.rpc.ParameterMode;
import javax.xml.namespace.QName;
public class Main{
  public static void main(String[] args) throws Exception {
    //グローバルな JAXM メッセージ ファクトリをセットアップする
System.setProperty("javax.xml.soap.MessageFactory",
"weblogic.webservice.core.soap.MessageFactoryImpl");
//グローバルな JAX-RPC サービス ファクトリをセットアップする
System.setProperty( "javax.xml.rpc.ServiceFactory",
"weblogic.webservice.core.rpc.ServiceFactoryImpl");
    //サービス ファクトリを作成
ServiceFactory factory = ServiceFactory.newInstance();
    //QName を定義
String targetNamespace =
"http://www.themindelectric.com/"
+ "wsdl/net.xmethods.services.stockquote.StockQuote/";
    QName serviceName =
new QName(targetNamespace,
"net.xmethods.services.stockquote.StockQuoteService" );
    QName portName =
new QName(targetNamespace,
"net.xmethods.services.stockquote.StockQuotePort" );
    QName operationName = new QName( "urn:xmethods-delayed-quotes",
"getQuote" );
    URL wsdlLocation =
new URL("http://services.xmethods.net/soap/urn:xmethods-delayed-quotes.wsdl");
    //サービスを作成
Service service = factory.createService( wsdlLocation, serviceName );
    //呼び出しを作成
Call call = service.createCall( portName, operationName );
    //リモートの Web サービスを呼び出し
Float result = (Float) call.invoke(new Object[] {
"BEAS"
});
    System.out.println("¥n");
System.out.println("This example shows how to create a dynamic client
application that invokes a non-WebLogic Web service.");
System.out.println("The webservice used was:
http://services.xmethods.net/soap/urn:xmethods-delayed-quotes.wsdl");
System.out.println("The quote for BEAS is: ");
System.out.println( result );
}
}

注意: javax.xml.rpc.Call API を使用して WSDL を使用する動的クライアントを作成する場合、以下のメソッドはクライアント アプリケーションで使用できません。

また、getTargetEndpointAddress() メソッドを実行する必要がある場合は、たとえ WSDL で targetEndPointAddress を利用できる場合でも、事前に setTargetEndpointAddress() メソッドが実行されている必要があります。

WSDL を使用しない動的クライアントの記述

WSDL を使用しない動的クライアントも WSDL を使用するクライアントに似ていますが、オペレーションに対するパラメータ、ターゲットのエンドポイント アドレスなど、WSDL にある情報を明示的に設定する必要があります。

以下の例は、クライアント アプリケーションで WSDL を指定せずに Web サービスを呼び出すクライアント アプリケーションの作成方法を示しています。

/**
* このクラスは、Web サービスを呼び出す Java クライアントを示す
*
* @author Copyright (c) 2002 by BEA Systems, Inc. All Rights Reserved.
*/
import javax.xml.rpc.ServiceFactory;
import javax.xml.rpc.Service;
import javax.xml.rpc.Call;
import javax.xml.rpc.ParameterMode;
import javax.xml.namespace.QName;
public class Main{
  public static void main(String[] args) throws Exception {
//グローバルな JAX-RPC サービス ファクトリをセットアップする
System.setProperty( "javax.xml.rpc.ServiceFactory",
"weblogic.webservice.core.rpc.ServiceFactoryImpl");
    //サービス ファクトリを作成
ServiceFactory factory = ServiceFactory.newInstance();
    //QName を定義
String targetNamespace =
"http://www.themindelectric.com/"
+ "wsdl/net.xmethods.services.stockquote.StockQuote/";
    QName serviceName =
new QName(targetNamespace,
"net.xmethods.services.stockquote.StockQuoteService" );
    QName portName =
new QName(targetNamespace,
"net.xmethods.services.stockquote.StockQuotePort" );
    QName operationName = new QName( "urn:xmethods-delayed-quotes",
"getQuote" );
    //サービスを作成
Service service = factory.createService( serviceName );
    //呼び出しを作成
Call call = service.createCall();
    //ポートとオペレーション名を設定
call.setPortTypeName( portName );
call.setOperationName( operationName );
//パラメータを追加
call.addParameter("symbol",
new QName( "http://www.w3.org/2001/XMLSchema", "string" ),
ParameterMode.IN);
    call.setReturnType(new QName( "http://www.w3.org/2001/XMLSchema","float") );
    //エンドポイント アドレスの設定
call.setTargetEndpointAddress("http://www.xmethods.com:9090/soap");
    //リモートの Web サービスを呼び出し
Float result = (Float) call.invoke(new Object[] {
"BEAS"
});
    System.out.println("¥n");
System.out.println("This example shows how to create a dynamic client
application that invokes a non-WebLogic Web service.");
System.out.println("The webservice used was:
http://www.themindelectric.com/wsdl/net.xmethods.services.stockquote.StockQuote");
System.out.println("The quote for BEAS is:");
System.out.println( result );
}
}

注意: WSDL を使用しない動的クライアントでは、getPorts() メソッドは常に null を返します。この動作は、WSDL を使用する動的クライアントとは異なります。WSDL を使用する動的クライアントの場合、メソッドは実際にポートを返します。

out または inout パラメータを使用するクライアントの記述

Web サービスは、複数の値を返す方法として out または inout パラメータを使用する場合があります。

out または inout パラメータを使用する Web サービスを呼び出すクライアントアプリケーションを記述する場合、out または inout パラメータのデータ型は、javax.xml.rpc.holders.Holder インタフェースを実装する必要があります。クライアント アプリケーションは、Web サービスを呼び出すと、Holder オブジェクトの out または inout パラメータを要求して、それらを標準の戻り値と同様に扱います。

たとえば、次の WSD Lで記述される Web サービスには、echoStructAsSimpleTypes() という、標準の in パラメータを 1 つと out パラメータを 3 つ受け取るオペレーションがあります。

http://soap.4s4c.com/ilab/soap.asp?WSDL

以下の静的クライアント アプリケーションは、この Web サービスを呼び出す 1 つの方法を示しています。アプリケーションは、clientgen Ant タスクを使用して生成された、スタブ クラスの入った Web サービス固有クライアント JAR ファイルが CLASSPATH に追加されているものとみなします。

package websvc;
/**
* このクラスは、Web サービスを呼び出す Java クライアントを示す
*
* @author Copyright (c) 2002 by BEA Systems, Inc. All Rights Reserved.
*/
public class Main{
  public static void main(String[] args) throws Exception {
//グローバルな JAX-RPC サービス ファクトリをセットアップする
System.setProperty( "javax.xml.rpc.ServiceFactory",
"weblogic.webservice.core.rpc.ServiceFactoryImpl");
    InteropLab_Impl test = new InteropLab_Impl();
InteropTest2PortType soap = test.getinteropTest2PortType();
    org.tempuri.x4s4c.x1.x3.wsdl.types.SOAPStruct inputStruct =
new org.tempuri.x4s4c.x1.x3.wsdl.types.SOAPStruct();
    inputStruct.setVarInt( 10 );
inputStruct.setVarFloat( 10.1f );
inputStruct.setVarString( "hi there" );
    javax.xml.rpc.holders.StringHolder outputString =
new javax.xml.rpc.holders.StringHolder();
javax.xml.rpc.holders.IntHolder outputInteger =
new javax.xml.rpc.holders.IntHolder();
javax.xml.rpc.holders.FloatHolder outputFloat =
new javax.xml.rpc.holders.FloatHolder();
    soap.echoStructAsSimpleTypes(inputStruct, outputString, outputInteger,
outputFloat);
    System.out.println("This example shows how to create a static client
application that invokes a non-WebLogic Web service.");
System.out.println("The webservice used was:
http://soap.4s4c.com/ilab/soap.asp?WSDL");
System.out.println("This webservice shows how to invoke an operation that
uses out parameters. The set parameters are below:");
System.out.println("outputString.value: " + outputString.value);
System.out.println("outputInteger.value: " + outputInteger.value);
System.out.println("outputFloat.value: " + outputFloat.value);
}
}

 


J2ME クライアントの記述

J2ME (Java 2 Platform, Micro Edition) Web サービス固有クライアント JAR ファイルを作成して、J2ME で実行されるクライアント アプリケーションと併用することができます。

注意: サポート対象の J2ME 環境は、CDC および Foundation プロファイルです。

Web サービスを呼び出す J2ME クライアント アプリケーションの作成方法は、非 J2ME クライアントの作成方法とほとんど同じです。たとえば、非 J2ME クライアント アプリケーションと同じ実行時クライアント JAR ファイル (WL_HOME¥server¥lib¥webserviceclient.jar) を使用します。

J2ME クライアント アプリケーションを記述するには、Web サービスを呼び出す Java クライアント アプリケーションの作成 : 主な手順の手順を行いますが、以下の変更点があります。

J2ME についての詳細は、http://java.sun.com/j2me/ を参照してください。

SSL を使用する J2ME クライアントの記述

WebLogic Server では、SSL を使用する J2ME クライアント アプリケーションを作成できます。SSL を使用する J2ME クライアントを記述する場合は、前節のガイドラインだけでなく以下のガイドラインにも従ってください。

 


ポータブル スタブの作成と使い方

Web サービスのクライアント JAR ファイル (製品の一環として配布されたものでも clientgen Ant タスクで生成された Web サービス固有のものでも) を WebLogic Server で動作するアプリケーションの一部として使用する場合、JAR ファイルの Java クラスと WebLogic Server の Java クラスが衝突することがあります。クライアント JAR ファイルがデプロイされている WebLogic Server と、そのクライアント JAR ファイルが生成された WebLogic Server のバージョンが異なる場合、この問題はより頻発します。この問題を解決するために、ポータブル スタブを使用します。

注意: ポータブル スタブを使用する必要があるのは、クライアント アプリケーションが WebLogic Server にデプロイされ、かつ動作している場合のみです。クライアント アプリケーションがスタンドアロンの場合、ポータブル スタブを使用する必要はありません。

クライアント アプリケーションでポータブル スタブを使用可能にする方法を、以下に示します。

  1. クライアント アプリケーションにおいて、一般的な webserviceclient.jar クライアント JAR ファイルではなく、wsclient70.jar (WebLogic Server と共に WL_HOME¥server¥lib ディレクトリに配布) と呼ばれる WebLogic Server の各リリースに固有のクライアント JAR ファイルを使用します。 wsclient70.jar には、標準のクライアント JAR ファイルと同じクラス ファイルを weblogic70.* というファイル名に変更したものが含まれています。これらのクラス ファイルはバージョンごとに固有のため、WebLogic Server の weblogic.* クラスと衝突することはありません。

  2. clientgen Ant タスクで生成した Web サービス固有のクライアント JAR ファイルだけでなく、サポートするすべてのクライアント JAR ファイルを VersionMaker ユーティリティを介して実行します。このユーティリティを使用すると、クライアント JAR ファイルのクラスが以下のように変更されます。

    • すべての weblogic.* クラスが weblogic70.* に変更される。

    • すべての weblogic.* クラスへの参照が weblogic70.* への参照に変更される。

    こうして変更された新しいバージョン固有のクライアント JAR ファイルを、クライアント アプリケーションで使用します。

    VersionMaker の使用方法の詳細については、VersionMaker ユーティリティの使い方を参照してください。

VersionMaker ユーティリティの使い方

weblogic.webservice.tools.versioning.VersionMaker ユーティリティでは、以下の引数を使用します。

クライアント JAR ファイルを更新して、バージョン固有の WebLogic Server クラスを使用するには、以下の手順に従います。

  1. 環境を設定します。

    Windows NT では、setWLSEnv.cmd コマンドを実行します。WL_HOME¥server¥bin ディレクトリにあります。WL_HOME は WebLogic プラットフォームがインストールされている最上位ディレクトリです。

    UNIX では、setWLSEnv.sh コマンドを実行します。WL_HOME/server/bin ディレクトリにあります。WL_HOME は WebLogic プラットフォームがインストールされている最上位ディレクトリです。

  2. weblogic.webservice.tools.versioning.VersionMaker を以下の例のように実行します。
    java weblogic.webservice.tools.versioning.VersionMaker ¥
    new_directory myclient.jar supporting.jar

    この例では、myclient.jar および supporting.jar というクライアント JAR ファイルの weblogic.* クラスを weblogic70.* という名前に変更し、それらのクラスへの参照をすべて更新しています。カレント ディレクトリ内の new_directory というディレクトリに、新しいクライアント JAR ファイルが生成されます。

 


WebLogic Web サービス クライアントとのプロキシ サーバの使用

プロキシ サーバを使用すると、WebLogic Web サービスのクライアント アプリケーションから、Web サービスのホスト サーバ (WebLogic または非 WebLogic) にリクエストをプロキシできます。 ただし、クライアント アプリケーションで必ず以下のすべてのシステム プロパティを設定する必要があります。

注意: Web サービスを呼び出すときのプロトコルとして HTTPS を使用する場合は、上記のプロパティの httphttps に置き換えます。 たとえば、http.proxyHost ではなく https.proxyHost を使用します。

以上のプロパティや、クライアント アプリケーションで設定できる他の WebLogic システム プロパティの詳細については、WebLogic Web サービスのシステム プロパティを参照してください。

また、プロキシ認証を使用するようにプロキシ サーバが設定されている場合は、クライアント アプリケーションから抜粋した次の例のように、クライアント アプリケーションのプロパティ weblogic.net.proxyAuthenticatorClassName を、weblogic.common.ProxyAuthentication インタフェースを実装する Java クラスの名前に設定することも必要です。

    System.setProperty("weblogic.net.proxyAuthenticatorClassName", "my.ProxyAuthenticator");

この例の my.ProxyAuthenticator は、weblogic.common.ProxyAuthentication インタフェースを実装する、クライアント アプリケーションの CLASSPATH にあるクラスです。

weblogic.common.ProxyAuthentication インタフェースを使用すると、ユーザ認証を必要とするプロキシ サーバを介して WebLogic HTTP および SSL プロトコルをトンネリングする場合に、必要とされるユーザ認証情報をクライアント アプリケーションが提供できるようになります。 このインタフェースの実装の詳細については、weblogic.common.ProxyAuthentication Javadoc を参照してください。

 


WebLogic Web サービスのホーム ページおよび WSDL の URL

WebLogic Server にデプロイされているすべての Web サービスには、ホーム ページがあります。ホーム ページからは、以下の操作ができます。

以下の URL では、まず、Web サービスのホーム ページを呼び出す方法を示し、次に WSDL を表示します。

[protocol]://[host]:[port]/[contextURI]/[serviceURI]
[protocol]://[host]:[port]/[contextURI]/[serviceURI]?WSDL

各値の説明は次のとおりです。

たとえば、次の build.xml ファイルを使用して、servicegen Ant タスクを使用して WebLogic Web サービスをアセンブルしたとします。

<project name="buildWebservice" default="build-ear">
<target name="build-ear">
<servicegen
destEar="myWebService.ear"
warName="myWAR.war"
contextURI="web_services">
<service
ejbJar="myEJB.jar"
targetNamespace="http://www.bea.com/examples/Trader"
serviceName="TraderService"
serviceURI="/TraderService"
generateTypes="True"
expandMethods="True" >
</service>
</servicegen>
</target>
</project>

Web サービスが ariel というホストのデフォルトのポート番号で実行されているとすると、その Web サービスのホーム ページを呼び出す URL は次のとおりです。

http://ariel:7001/web_services/TraderService

この Web サービスの自動生成による WSDL を取得する URL は次のとおりです。

http://ariel:7001/web_services/TraderService?WSDL

 


Web サービス呼び出し中のエラーのデバッグ

Web サービス (WebLogic、非 WebLogic のいずれであっても) の呼び出し中にエラーが発生した場合、生成された SOAP の要求メッセージおよび応答メッセージを表示すると、多くの場合、問題が明らかになり便利です。

SOAP の要求メッセージおよび応答メッセージを表示するには、-Dweblogic.webservice.verbose=true フラグを使用してクライアント アプリケーションを実行します。以下に、runService というクライアント アプリケーションを実行する例を示します。

prompt> java -Dweblogic.webservice.verbose=true runService

SOAP の要求および応答メッセージが、クライアント アプリケーションを実行したコマンド ウィンドウにフル出力されます。

また、WebLogic Server の起動時に -Dweblogic.webservice.verbose=true フラグを指定することによって、デプロイされた WebLogic Web サービスが呼び出されるたびに、SOAP の要求メッセージおよび応答メッセージが出力されるように、WebLogic Server をコンフィグレーションすることもできます。SOAP メッセージは、WebLogic Server を起動したコマンド ウィンドウに出力されます。

注意: デバッグ メッセージのコマンド ウィンドウへの出力という余分の作業によりパフォーマンスが低下することが考えられるので、この WebLogic Server のフラグは開発段階でのみ設定するようお勧めします。

 


WebLogic Web サービスのシステム プロパティ

次の表に、Web サービスを呼び出すクライアント アプリケーションで設定できる WebLogic Web サービスのシステム プロパティを示します。プロパティの設定には System.setProperty() メソッドを使用します。

表8-2 WebLogic Web サービスのシステム プロパティ

システム プロパティ

説明

データ型

weblogic.webservice.transport.http.full-url

クライアント アプリケーションが呼び出している Web サービスの URL の指定は、HTTP リクエストの Request-URI フィールドで相対的に行うのではなく、完全な URL として行うことを指定する。

有効な値は True および False。 デフォルト値は False

Boolean

weblogic.webservice.transport.http.proxy.host

プロキシ サーバを使用して HTTP 接続を行う場合は、クライアント アプリケーションで、このシステム プロパティを使用してプロキシ サーバのホスト名を指定する。

String

weblogic.webservice.transport.http.proxy.port

プロキシ サーバを使用して HTTP 接続を行う場合は、クライアント アプリケーションで、このシステム プロパティを使用してプロキシ サーバのポートを指定する。

String

weblogic.webservice.transport.https.proxy.host

プロキシ サーバを使用して HTTPS (HTTP over SSL) 接続を行う場合は、クライアント アプリケーションで、このシステム プロパティを使用してプロキシ サーバのホスト名を指定する。

String

weblogic.webservice.transport.https.proxy.port

プロキシ サーバを使用して HTTPS (HTTP over SSL) 接続を行う場合は、クライアント アプリケーションで、このシステム プロパティを使用してプロキシ サーバのポートを指定する。

String

weblogic.webservice.verbose

Web サービスの呼び出し時に verbose モードを有効にして、SOAP リクエストおよび応答のメッセージを表示できるようにする。

有効な値は True および False。 デフォルト値は False

詳細については、Web サービス呼び出し中のエラーのデバッグを参照。

Boolean

weblogic.webservice.client.ssl.strictcertchecking

WebLogic 提供の SSL 実装を使用する場合に厳密な証明書検証を有効または無効にする。

True に設定すると厳密な証明書検証が有効になり、False では無効になる。 デフォルト値は False

例については、WebLogic Server が提供する SSL 実装を使用するを参照。

Boolean

weblogic.webservice.client.ssl.trustedcertfile

CA (Certificate Authority : 認証局) の証明書が格納されている、クライアント アプリケーションのコンピュータに配置されたファイルの名前。 このファイルに証明書のある CA は、信頼を受けて WebLogic Server 証明書の発行が任されている。 このファイルには、ユーザ自身が信頼する証明書も格納できる。

String

weblogic.webservice.client.ssl.adapterclass

サードパーティの SSL 実装を使用するために実装されたアダプタ クラスの完全修飾名。

例については、サードパーティの SSL 実装を使用するを参照。

String

weblogic.http.KeepAliveTimeoutSeconds

リクエストをタイム アウトするまで HTTP キープアライブを維持する秒数。 HTTP キープアライブを使用しない場合は、このプロパティを 0 に設定する。

デフォルト値は 30 秒。

Integer.

 

Back to Top Previous Next