ORACLE JAPAN Server Release 6.1

 

  |  

  WebLogic Server ホーム   |     Web サービス   |   前へ   |   次へ   |   目次   |   索引   |   PDF 版

WebLogic Web サービスの呼び出し

 

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

 


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

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

クライアント アプリケーションは、呼び出す Web サービスに関する SOAP メッセージをアセンブルして必要なすべてのデータを SOAP メッセージの本文に含めます。次にクライアントは SOAP メッセージを HTTP/HTTPS を介して WebLogic Server に送信します。そこで Web サービスが実行され、SOAP メッセージが HTTP/HTTPS を介してクライアントに送り返されます。

注意: クライアント アプリケーションを Java で記述する場合、WebLogic サーバはオプションの Java クライアント JAR ファイルを提供します。このファイルには WebLogic Web サービスを呼び出すために必要な WebLogic Web サービス クライアント API や WebLogic FastParser などが含まれます。他の Java WebLogic サーバ クライアントとは異なり、weblogic.jar ファイルを含める必要がなく、シンクライアントを作成できます。JAR ファイルのダウンロードの詳細については、 Java クライアント JAR ファイルの Web サービス ホーム ページからのダウンロードを参照してください。

各 Web サービスは独自のホーム ページを持っています。同じサーブレット コンテキストを共有する Web サービスはこの Web ページを共有します。この Web ページを使用して Web サービスの WSDL および Java クライアント JAR ファイルを取得します。この Web ページの詳細およびブラウザで呼び出す方法については、 WebLogic Web サービス ホーム ページの呼び出しを参照してください。

WebLogic Web サービス クライアント API

WebLogic サーバは、デプロイされた WebLogic Web サービスからダウンロード可能な Java クライアント JAR ファイル内にクライアント サイド Java SOAP API を持ちます。この API を使用して WebLogic Web サービスを呼び出す Java クライアント アプリケーションを作成します。このマニュアル内の例および製品に付属のサンプルでは、この API を使用しています。

警告: W3C または JavaSoft からの標準クライアント サイド Web Service API 仕様は利用できません。WebLogic Web サービス クライアント API が Java コミュニティ プロセスでは標準化されていないため、BEA Systems ではリリースごとに動作方法を変更する権利を保持し、下位互換性を保たない場合があります。

この章の例では、WebLogic Web サービス クライアント API のメイン クラス、インタフェース、およびメソッドについて簡単に説明します。API についての詳細なドキュメントは、「WebLogic Server API リファレンス」で weblogic.soap パッケージを検索してください。

WebLogic Web サービス クライアント API でサポートされているクライアント モード

WebLogic Web サービス クライアント API では、WebLogic Web サービスを呼び出す Java クライアント アプリケーションの次の 2 つのモードをサポートしています。

この章で説明されている静的および動的クライアント アプリケーションはどちらも、Web サービスの WSDL を使用します。WSDL を使用しないクライアント アプリケーションの作成については、 WSDL ファイルを使用しない Web サービスの呼び出しを参照してください。

RPC スタイル Web サービスまたはメッセージスタイル Web サービスのいずれかを呼び出すために、静的クライアント アプリケーションと動的クライアント アプリケーションのどちらも使用できます。

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

WebLogic Server には、RPC スタイル Web サービスおよびメッセージスタイル Web サービスを作成する両方の例と、Web サービスを呼び出す Java および Microsoft VisualBasic クライアント アプリケーションの両方の例があります。

これらの例は、BEA_HOME\samples\examples\webservices ディレクトリにあります。BEA_HOME は、メイン WebLogic Server インストール ディレクトリを指します。RPC スタイル Web サービスの例は rpc ディレクトリにあり、メッセージスタイル Web サービスの例は message ディレクトリにあります。

例を作成して実行する方法の詳細については、ブラウザで Web ページ BEA_HOME\samples\examples\webservices\package-summary.html を呼び出してください。

 


WebLogic Web サービス ホーム ページの呼び出し

WebLogic Web サービス ホーム ページは、特定のサーブレット コンテキスト用に定義された Web サービスを WSDL ファイルおよび各 Web サービスに関連付けられている Java クライアント JAR ファイルとともに一覧表示します。

次のテンプレート URL を使用してブラウザで WebLogic Web サービス ホーム ページを呼び出します。

[protocol]://[host]:[port]/[context]/index.html

この URL の説明は以下のとおりです。

たとえば、次の build.xml ファイルを使用して Web サービスをビルドするとします。

<project name="myProject" default="wsgen">
<target name="wsgen">
<wsgen
destpath="myWebService.ear"
context="/myContext"
protocol="http">
<rpcservices path="myEJB.jar">
<rpcservice
bean="statelessSession"
uri="/rpc_URI"/>
</rpcservices>
<messageservices>
<messageservice
name="sendMsgWS"
action="send"
destination="examples.soap.msgService.MsgSend"
destinationtype="topic"
uri="/sendMsg"
connectionfactory="examples.soap.msgService.MsgConnectionFactory"/>
<messageservice
name="receiveMsgWS"
action="receive"
destination="examples.soap.msgService.MsgReceive"
destinationtype="topic"
uri="/receiveMsg"
connectionfactory="examples.soap.msgService.MsgConnectionFactory"/>
</messageservices>
</wsgen>
</target>
</project>

デフォルト ポート 7001myHost ホスト上の /myContext コンテキスト用の WebLogic Web サービス ホーム ページを呼び出す URL は、次のようになります。

http://www.myHost.com:7001/myContext/index.html

Web サービス ホーム ページからの WSDL の取得

Web サービス ホーム ページから Web サービスの WSDL を取得するには、次の手順に従います。

  1. WebLogic Web サービス ホーム ページの呼び出しに記載されている手順に従って ブラウザでコンテキスト用の Web サービス ホーム ページを呼び出します。

  2. Web サービスの名前をクリックします。

  3. [WSDL] リンクをクリックします。指定した Web サービスの WSDL ファイルがブラウザにプレーン テキストで表示されます。

Java クライアント JAR ファイルの Web サービス ホーム ページからのダウンロード

WebLogic Server は、WebLogic Web サービスを呼び出す Java クライアント アプリケーションを作成するために必要な Java コード のほとんどを含む Java クライアント JAR ファイルを提供します。特に、JAR ファイルには クライアント サイド SOAP API の WebLogic 実装が含まれ、SOAP メッセージの作成および処理に低レベル Java コードを記述する必要がありません。

Java クライアント JAR ファイルには、次のオブジェクトが含まれます。

注意: BEA では現在、クライアント機能をサーバ機能と別個にはライセンスしていないため、必要な場合には、この Java クライアント JAR ファイルをユーザ自身の顧客に再配布できます。

Java クライアント JAR ファイルをコンピュータにダウンロードするには、次の手順に従います。

  1. WebLogic Web サービス ホーム ページの呼び出しに記載されている手順に従って、指定したコンテキスト用の Web サービス ホーム ページをブラウザで呼び出します。

  2. Web サービスの名前をクリックします。

  3. [client.jar] リンクをクリックします。

  4. ローカル コンピュータ上で Java クライアント JAR ファイルを格納するディレクトリを指定します。

  5. JAR ファイルを指定したディレクトリに格納します。

  6. CLASSPATH を更新して Java クライアント JAR ファイルを含めます。

 


WebLogic Web サービスを呼び出して WSDL を取得する URL

WSDL は、呼び出す Web サービスを記述するためにクライアント アプリケーションによって使用されます。

WebLogic Web サービスの WSDL にアクセスするための URL は、次のとおりです。

[protocol]://[host]:[port]/[context]/[WSname]/[WSname].wsdl

この URL の説明は以下のとおりです。

たとえば、 WebLogic Web サービス ホーム ページの呼び出し にリストされている build.xml サンプル ファイルを使用すると、RPC スタイル Web サービスの WSDL にアクセスする URL は次のようになります。

http://www.myHost.com:7001/myContext/statelessSession.WeatherHome/statelessSession.WeatherHome.wsdl

同様に、2 つのメッセージスタイル Web サービス用の WSDL にアクセスする URL は、次のようになります。

http://www.myHost.com:7001/myContext/sendMsgWS/sendMsgWS.wsdl
http://www.myHost.com:7001/myContext/receiveMsgWS/receiveMsgWS.wsdl

 


RPC スタイル WebLogic Web サービスを呼び出すクライアントの作成

この節では、RPC スタイル WebLogic Web サービスを Java および Microsoft SOAP ToolKit の 2 つのタイプのクライアントから呼び出す方法について説明します。

この節で示す例では、examples.ejb.basic.statelessSession WebLogic Server 例で説明されている Trader ステートレス セッション EJB に基づいた RPC スタイル Web サービスを呼び出します。

Java クライアントの記述

必要な Java コード のほとんどすべてが WebLogic Server で提供され、クライアント コンピュータにダウンロードする Java クライアント JAR ファイルにパッケージ化されているため、WebLogic Web サービスを呼び出す Java クライアント アプリケーションの作成は簡単です。

この節では、クライアント アプリケーションの静的および動的の 2 つのモードについて説明します。EJB と JavaBean パラメータおよび戻り値の型の Java インタフェースがあり、クライアント Java コード内で直接使用する場合は、静的クライアントを使用します。インタフェースがない場合は、動的クライアントを使用します。

静的 Java クライアントの記述

次の例では、WebLogic Server の examples.ejb.basic.statelessSession EJB のサンプルに基づいた RPC スタイル Web サービスを呼び出す簡単な静的 Java クライアントを示します。

この例では、Web サービスの WSDL の取得に URL の http://www.myhost.com:7001/myContext/statelessSession/statelessSession.wsdl を使用します。この URL の作成方法および RPC スタイル Web サービスの作成に使用される build.xml ファイルの例については、 WebLogic Web サービスを呼び出して WSDL を取得する URLを参照してください。

例の後に示す手順では、このクライアントを作成するために実行する基本手順で例に関連する部分について説明します。

import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;

import examples.ejb.basic.statelessSession.Trader;
import examples.ejb.basic.statelessSession.TradeResult;

public class Client{

public static void main( String[] arg ) throws Exception

Properties h = new Properties();

h.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.soap.http.SoapInitialContextFactory");

h.put("weblogic.soap.wsdl.interface",
Trader.class.getName() );

Context context = new InitialContext(h);

Trader service = (Trader)context.lookup(
"http://www.myHost.com:7001/myContext/statelessSession/statelessSession.wsdl" );

TradeResult result = (TradeResult)service.buy( "BEAS", 100 );

System.out.print( result.getStockSymbol() );
System.out.print( ":" );
System.out.println( result.getNumberTraded() );
}
}

WebLogic Web サービスを静的に呼び出す Java コードは、EJB を呼び出すリモート メソッド呼び出し(RMI)クライアント コードと似ています。主な違いは次のとおりです。

RPC スタイル WebLogic Web サービスを呼び出す静的 Java クライアントを作成するには、次の手順に従います。

  1. WebLogic Web サービスをホストする WebLogic Server から、Java クライアント JAR ファイルを取得します。

    この手順の詳細については、 Java クライアント JAR ファイルの Web サービス ホーム ページからのダウンロードを参照してください。

  2. クライアント コンピュータ上の CLASSPATH に、Java クライアント JAR ファイルを追加します。

  3. クライアント Java プログラムを作成します。以降の手順では、Java コードの Web サービスに固有の部分について説明します。

    1. クライアント アプリケーションの main メソッド内で、次の Java コードを追加してクライアントを初期化し、Web サービスと対話できるようにします。

      Properties h = new Properties();

      h.put(Context.INITIAL_CONTEXT_FACTORY,
      "weblogic.soap.http.SoapInitialContextFactory");

      h.put("weblogic.soap.wsdl.interface",
      Trader.class.getName() );

      Context context = new InitialContext(h);

      Trader service = (Trader)context.lookup( "http://www.myHost.com:7001/myContext/statelessSession/statelessSession.wsdl" );

      この例では、Trader は EJB へのパブリック インタフェースです。context.lookup() メソッドで使用される URL の作成方法の詳細については、 WebLogic Web サービスを呼び出して WSDL を取得する URLを参照してください。

    2. 次の例に示されているように EJB のパブリック メソッドを実行して Web サービス操作を呼び出します。

      TradeResult result = (TradeResult)service.buy( "BEAS", 100 );

      クライアントは、Trader EJB の buy() メソッドを実行します。戻り値は TraderResult JavaBean オブジェクトです。Trader EJB のパブリック メソッドを見つけるには、Web サービスの返された WSDL を検証するか、またはダウンロードした Java クライアント JAR ファイルを unJAR して javap ユーティリティを使用して Trader インタフェースのメソッドをリストします。

    3. 返された TraderResult JavaBean の get メソッドを使用して返された結果を取得します。TraderResult クラスのメソッドを見つけるには、Java クライアント JAR ファイルを unJAR して javap ユーティリティを使用して TraderResult クラスのメソッドをリストします。

      System.out.print( result.getStockSymbol() );
      System.out.print( ":" );
      System.out.println( result.getNumberTraded() );

  4. 通常どおりにクライアント Java プログラムをコンパイルして実行します。

動的 Java クライアントの記述

次の例では、WebLogic Server の examples.ejb.basic.statelessSession EJB のサンプルに基づいた RPC スタイル Web サービスを呼び出す簡単な動的 Java クライアントを示します。

この例では、Web サービスの WSDL の取得に URL のhttp://www.myhost.com:7001/myContext/statelessSession/statelessSession.wsdl を使用します。この URL の作成方法および RPC スタイル Web サービスの作成に使用される build.xml ファイルの例については、 WebLogic Web サービスを呼び出して WSDL を取得する URLを参照してください。

例の後に示す手順では、このクライアントを作成するために実行する基本手順で例に関連する部分について説明します。

import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;

import examples.ejb.basic.statelessSession.TradeResult;

import weblogic.soap.WebServiceProxy;
import weblogic.soap.SoapMethod;

public class DynamicClient{

public static void main( String[] arg ) throws Exception{

Properties h = new Properties();

h.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.soap.http.SoapInitialContextFactory");

Context context = new InitialContext(h);

WebServiceProxy proxy = (WebServiceProxy)context.lookup(
"http://www.myHost.com:7001/myContext/statelessSession/statelessSession.wsdl" );

SoapMethod method = proxy.getMethod( "buy" );

TradeResult result = (TradeResult)method.invoke(
new Object[]{ "BEAS", new Integer(100) } );

System.out.print( result.getStockSymbol() );
System.out.print( ":" );
System.out.println( result.getNumberTraded() );
}
}

RPC スタイル WebLogic Web サービスを呼び出す動的 Java クライアントを作成するには、次の手順に従います。

  1. WebLogic Web サービスをホストする WebLogic Server から、Java クライアント JAR ファイルを取得します。

    この手順の詳細については、 Java クライアント JAR ファイルの Web サービス ホーム ページからのダウンロードを参照してください。

  2. クライアント コンピュータ上の CLASSPATH に、Java クライアント JAR ファイルを追加します。

  3. クライアント Java プログラムを作成します。以降の手順では、Java コードの Web サービスに固有の部分について説明します。

    1. クライアント アプリケーションの main メソッド内で、次の Java コードを追加してクライアントを初期化し、Web サービスと対話できるようにします。

      Properties h = new Properties();

      h.put(Context.INITIAL_CONTEXT_FACTORY,
      "weblogic.soap.http.SoapInitialContextFactory");

      Context context = new InitialContext(h);

      WebServiceProxy proxy = (WebServiceProxy)context.lookup( "http://www.myHost.com:7001/myContext/statelessSession/statelessSession.wsdl" );

      この例では、context.lookup() メソッドは、特定の Trader オブジェクトではなく汎用 WebServiceProxy オブジェクトを返します。これにより、WebServiceProxy が任意の EJB オブジェクトを表すことが可能になるため、例がより動的になります。context.lookup() メソッドで使用される URL の作成方法の詳細については、 WebLogic Web サービスを呼び出して WSDL を取得する URLを参照してください。

    2. 次の例に示されているように EJB のパブリック メソッドを実行して Web サービス操作を呼び出します。

      SoapMethod method = proxy.getMethod( "buy" );

      TradeResult result = (TradeResult)method.invoke(
      new Object[]{ "BEAS", new Integer(100) } );

      クライアントは、invoke() メソッドを使用して間接的に Trader EJB の buy() メソッドを実行します。戻り値は TraderResult JavaBean オブジェクトです。Trader EJB のパブリック メソッドを見つけるには、Web サービスの返された WSDL を検証するか、またはダウンロードした Java クライアント JAR ファイルを unJAR して javap ユーティリティを使用して Trader インタフェースのメソッドをリストします。

    3. 返された TraderResult JavaBean の get メソッドを使用して返された結果を取得します。TraderResult クラスのメソッドを見つけるには、Java クライアント JAR ファイルを unJAR して javap ユーティリティを使用して TraderResult クラスのメソッドをリストします。

      System.out.print( result.getStockSymbol() );
      System.out.print( ":" );
      System.out.println( result.getNumberTraded() );

  4. 通常どおりにクライアント Java プログラムをコンパイルして実行します。

Microsoft SOAP Toolkit クライアントの記述

WebLogic Web サービスは、Microsoft SOAP ToolKit で提供されるクライアント サイド コンポーネントを使用して Microsoft Visual Basic アプリケーションから呼び出すことができます。

注意: WebLogic Server 6.1 では、Microsoft SOAP ToolKit のバージョン 2.0sp2 のみをサポートしています。

次の Visual Basic のサンプル コードは、examples.webservices.rpc 例で記述される WebLogic Web サービスを呼び出す簡単な例を示します。

SET soapclient = CreateObject("MSSOAP.SoapClient")

Call soapclient.mssoapinit(

"http://myhost:7001/weather/statelessSession.WeatherHome/statelessSession.WeatherHome.wsdl", "Weather", "WeatherPort")

wscript.echo soapclient.getTemp(94117)

Microsoft SOAP ToolKit を使用して WebLogic Web サービスを Visual Basic アプリケーションから呼び出すには、次の手順に従います。

  1. SoapClient オブジェクトを Visual Basic アプリケーション内でインスタンス化します。

  2. SoapClient.mssoapinit() メソッドを実行することによって 次のパラメータを渡し、SoapClient オブジェクトを初期化します。

  3. WebLogic Web サービス メソッドを実行します。

 


メッセージスタイル WebLogic Web サービスを呼び出す Java クライアントの作成

この節では、Java クライアント アプリケーションからメッセージスタイル Web サービスを呼び出す方法について説明します。

必要な Java コード のほとんどすべてが WebLogic Server で提供され、クライアント コンピュータにダウンロードする Java クライアント JAR ファイルにパッケージ化されているため、メッセージスタイル WebLogic Web サービスを呼び出す Java クライアント アプリケーションの作成は簡単です。

この節では、データを WebLogic Server に送信するメッセージスタイル Web サービスを呼び出す Java クライアントと、データを受信するメッセージスタイル Web サービスを呼び出す Java クライアントの 2 種類について説明します。両方の例で、動的 Java クライアントの作成方法を示します。

注意: 送受信アクションは、クライアント アプリケーションの視点から見ています。

例で示す 2 つのメッセージスタイル Web サービスは、次の build.xml ファイルを使用してアセンブルされていると想定します。

<project name="myProject" default="wsgen">
<target name="wsgen">
<wsgen
destpath="messageExample.ear"
context="/msg"
protocol="http" >
<messageservices>
<messageservice
action="send"
name="Sender"
destination="examples.soap.msgService.MsgSend"
destinationtype="topic"
uri="/sendMsg"
connectionfactory="examples.soap.msgService.MsgConnectionFactory"/>
<messageservice
action="receive"
name="Receiver"
destination="examples.soap.msgService.MsgReceive"
destinationtype="topic"
uri="/receiveMsg"
connectionfactory="examples.soap.msgService.MsgConnectionFactory"/>

</messageservices>
</wsgen>
</target>
</project>

build.xml ファイルは、次の 2 つのメッセージスタイル Web サービスを示しています。クライアント アプリケーションが JNDI 名 examples.soap.msgService.MsgSend を使用して JMS トピックにデータを送信するために使用する Sender と、クライアント アプリケーションが JNDI 名 examples.soap.msgService.MsgReceive を使用して JMS トピックからデータを受信するために使用する Receiver の 2 つです。両方のメッセージスタイル Web サービスは、同じ ConnectionFactory(examples.soap.msgService.MsgConnectionFactory)を使用して JMS 接続を作成します。

メッセージスタイル Web サービスへのデータの送信

この節では、Web サービスを呼び出してデータを WebLogic Server に送信する動的 Java クライアント アプリケーションを作成する方法について説明します。要点を簡潔に示すため、この例ではデータを含める Stringデータ型を送信します。

注意: org.w3c.dom.Documentorg.w3c.dom.DocumentFragment、または org.w3c.dom.Element の各データ型を send メソッドに送信する方法を示すさらに複雑な例については、 WSDL ファイルを使用しない Web サービスの呼び出しを参照してください。

データを WebLogic Server に送信するメッセージスタイル Web サービスは、単一のメソッド send を定義します。これは、ユーザの Java クライアント アプリケーションから呼び出す必要がある唯一のメソッドです。send メソッドで使用できるパラメータは実際のデータです。データ型は String(例で使用)、DOM ツリー、InputStream などの任意の型を使用できます。データは Web サービスをアセンブルするために使用される build.xml ファイル内に指定した JMS の送り先で最終的に終了します。

例では URL http://localhost:7001/msg/Sender/Sender.wsdl を使用して Web サービスの WSDL を取得します。この URL の作成方法の詳細については、 WebLogic Web サービスを呼び出して WSDL を取得する URLを参照してください。

例の後の手順では、このクライアントを作成するために実行する基本手順の一部として、例に関連する節について説明します。

package examples.soap;

import java.util.Properties;
import java.net.URL;
import javax.naming.Context;
import javax.naming.InitialContext;

import weblogic.soap.WebServiceProxy;
import weblogic.soap.SoapMethod;
import weblogic.soap.SoapType;
import weblogic.soap.codec.CodecFactory;
import weblogic.soap.codec.SoapEncodingCodec;

public class ProducerClient{

public static void main( String[] arg ) throws Exception{

Properties h = new Properties();

h.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.soap.http.SoapInitialContextFactory");
h.put("weblogic.soap.verbose", "true" );

CodecFactory factory = CodecFactory.newInstance();
factory.register( new SoapEncodingCodec() );
h.put( "weblogic.soap.encoding.factory", factory );

Context context = new InitialContext(h);

WebServiceProxy proxy = (WebServiceProxy)context.lookup(
"http://localhost:7001/msg/Sender/Sender.wsdl" );
SoapMethod method = proxy.getMethod( "send" );

String toSend = arg.length == 0 ? "No arg to send" : arg[0];
Object result = method.invoke( new Object[]{ toSend } );

}

}

データを WebLogic Server に送信するメッセージスタイル WebLogic Web サービスを呼び出す動的 Java クライアントを作成するには、次の手順に従います。

  1. WebLogic Web サービスをホストする WebLogic Server から、Java クライアント JAR ファイルを取得します。

    この手順の詳細については、 Java クライアント JAR ファイルの Web サービス ホーム ページからのダウンロードを参照してください。

  2. クライアント コンピュータ上の CLASSPATH に、Java クライアント JAR ファイルを追加します。

  3. クライアント Java プログラムを作成します。以降の手順では、Java コードの Web サービスに固有の部分について説明します。

    1. クライアント アプリケーションの main メソッドで、Properties オブジェクトを作成して初期コンテキスト プロパティを設定します。

      Properties h = new Properties();

      h.put(Context.INITIAL_CONTEXT_FACTORY,
      "weblogic.soap.http.SoapInitialContextFactory");
      h.put("weblogic.soap.verbose", "true" );

    2. エンコーディング スタイルのファクトリを作成して SOAP エンコーディング スタイルを登録します。

      CodecFactory factory = CodecFactory.newInstance();
      factory.register( new SoapEncodingCodec() );
      h.put( "weblogic.soap.encoding.factory", factory );

    3. 初期コンテキストを作成し、WSDL を使用して Web サービスをルックアップしてから send メソッドを取得します。

      Context context = new InitialContext(h);

      WebServiceProxy proxy = (WebServiceProxy)context.lookup(
      "http://localhost:7001/msg/Sender/Sender.wsdl" );
      SoapMethod method = proxy.getMethod( "send" );

    4. send メソッドを呼び出して、データを Web サービスに送信します。この例では、クライアント アプリケーションは単純に最初の引数を受け取って String として送信します。ユーザーが特定の引数を指定しない場合、クライアント アプリケーションでは文字列 No arg to send を送信します。

      String toSend = arg.length == 0 ? "No arg to send" : arg[0];
      Object result = method.invoke( new Object[]{ toSend } );

  4. 通常どおりにクライアント Java プログラムをコンパイルして実行します。

メッセージスタイル Web サービスからのデータの受信

この節では、Web サービスを呼び出してデータを WebLogic Server から受信する動的 Java クライアント アプリケーションを作成する方法について説明します。

データを WebLogic Server から受信するメッセージスタイル Web サービスは、receive という単一のメソッドを定義します。これは、ユーザの Java クライアント アプリケーションから呼び出す必要がある唯一のメソッドです。receive メソッドでは入力パラメータを使用できません。Web サービスをアセンブルするために使用された build.xml ファイル内に指定する JMS の送り先から Web サービスが取得したデータを含む汎用 Java オブジェクトを返します。

この節で示す例では URL の http://localhost:7001/msg/Receiver/Receiver.wsdl を使用して Web サービスの WSDL を取得します。この URL の作成方法の詳細については、 WebLogic Web サービスを呼び出して WSDL を取得する URLを参照してください。

例の後の手順では、このクライアントを作成するために実行する基本手順の一部として、例に関連する節について説明します。

package examples.soap;

import java.util.Properties;
import java.net.URL;
import javax.naming.Context;
import javax.naming.InitialContext;

import weblogic.soap.WebServiceProxy;
import weblogic.soap.SoapMethod;
import weblogic.soap.SoapType;
import weblogic.soap.codec.CodecFactory;
import weblogic.soap.codec.SoapEncodingCodec;

public class ConsumerClient{

public static void main( String[] arg ) throws Exception{

Properties h = new Properties();
h.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.soap.http.SoapInitialContextFactory");
h.put("weblogic.soap.verbose", "true" );

CodecFactory factory = CodecFactory.newInstance();
factory.register( new SoapEncodingCodec() );
h.put( "weblogic.soap.encoding.factory", factory );

Context context = new InitialContext(h);

WebServiceProxy proxy = (WebServiceProxy)context.lookup(
"http://localhost:7001/msg/Receiver/Receiver.wsdl" );
SoapMethod method = proxy.getMethod( "receive" );

while( true ){
Object result = method.invoke( null );
System.out.println( result );
}
}
}

データを WebLogic Server から受信するメッセージスタイル WebLogic Web サービスを呼び出す動的 Java クライアントを作成するには、次の手順に従います。

  1. WebLogic Web サービスをホストする WebLogic Server から、Java クライアント JAR ファイルを取得します。

    この手順の詳細については、 Java クライアント JAR ファイルの Web サービス ホーム ページからのダウンロードを参照してください。

  2. クライアント コンピュータ上の CLASSPATH に、Java クライアント JAR ファイルを追加します。

  3. クライアント Java プログラムを作成します。以降の手順では、Java コードの Web サービスに固有の部分について説明します。

    1. クライアント アプリケーションの main メソッドで、Properties オブジェクトを作成して初期コンテキスト プロパティを設定します。

      Properties h = new Properties();
      h.put(Context.INITIAL_CONTEXT_FACTORY,
      "weblogic.soap.http.SoapInitialContextFactory");
      h.put("weblogic.soap.verbose", "true" );

    2. エンコーディング スタイルのファクトリを作成して SOAP エンコーディング スタイルを登録します。

      CodecFactory factory = CodecFactory.newInstance();
      factory.register( new SoapEncodingCodec() );
      h.put( "weblogic.soap.encoding.factory", factory );

    3. 初期コンテキストを作成し、WSDL を使用して Web サービスをルックアップしてから receive メソッドを取得します。

      Context context = new InitialContext(h);

      WebServiceProxy proxy = (WebServiceProxy)context.lookup(
      "http://localhost:7001/msg/Receiver/Receiver.wsdl" );
      SoapMethod method = proxy.getMethod( "receive" );

    4. receive メソッドを呼び出してデータを Web サービスから受信します。この例では、クライアント アプリケーションは無限 while ループを使用して連続して receive メソッドを呼び出します。つまり、メッセージの JMS の送り先をポーリングします。receive メソッドがデータを返すと、クライアント アプリケーションはその結果を標準の出力に出力します。

      while( true ){
      Object result = method.invoke( null );
      System.out.println( result );

  4. 通常どおりにクライアント Java プログラムをコンパイルして実行します。

 


WebLogic Web サービスからの例外の処理

WebLogic Server が Web サービスを実行中に例外が生成された場合、Web サービスを呼び出したクライアント アプリケーションが標準 SOAP 障害についての実行時 weblogic.soap.SoapFault 例外を受け取ります。

WebLogic Server の次のタイプの例外は、クライアント アプリケーション内で実行時 SoapFault 例外を生成する可能性があります。

クライアント アプリケーションが SoapFault 例外を受け取った場合、weblogic.soap.SoapFault の次のメソッドを使用して検証してください。

次の Java クライアント アプリケーションからの抜粋部分は、weblogic.soap.SoapFault を使用して WebLogic Server 上で発生したエラーを検証する例を示しています。

import weblogic.soap.SoapFault;

...

try {
TradeResult result = (TradeResult)method.invoke(
new Object[]{ "BEAS", new Integer(100) } );

System.out.print( result.getStockSymbol() );
System.out.print( ":" );
System.out.println( result.getNumberTraded() );
} catch (SoapFault fault){
System.out.println( "Ooops, got a fault: " + fault );
fault.printStackTrace();
}

 


Web サービスを呼び出すための初期コンテキスト ファクトリ プロパティ

次の表は、Java クライアント アプリケーション内で WebLogic で生成された Java クライアント JAR ファイルを使用して WebLogic Web サービスを呼び出すときに Properties オブジェクトを使用して設定できる Java プロパティを示しています。

注意: これらのプロパティは、初期コンテキスト ファクトリに渡されます。Java システム プロパティではありません。

表3-1 Web サービスを呼び出すための初期コンテキスト ファクトリ プロパティ

プロパティ

説明

weblogic.soap.wsdl.interface

Web サービスの基礎になるステートレス セッション EJB のインタフェースを指定する。

weblogic.soap.verbose

true に設定されたときに、Java クライアントによって WebLogic Web サービスを呼び出すために生成された SOAP パケットは、クライアントへの出力になる。

有効な値は true および false(デフォルト)。

weblogic.soap.encoding.factory

XML と Java データ間で変換を行うエンコーダおよびデコーダを含む CodecFactory を指定する。

有効な値は weblogic.soap.codec.CodecFactory のインスタンス。

java.naming.factory.initial

初期 SOAP コンテキスト ファクトリを指定する。

有効な値は weblogic.soap.http.SoapInitialContextFactory のインスタンス。

java.naming.security.principal

HTTP セキュリティを設定するときにユーザ名を指定する。

java.naming.security.credentials

HTTP セキュリティを設定するときにユーザ パスワードを指定する。

 


WebLogic Web サービスを呼び出すクライアントに必要な追加クラス

WebLogic Web サービスは、次の 2 つのエンコーディング スタイルをサポートしています。

Java クライアント アプリケーションが SOAP エンコーディングを使用する場合、WebLogic Server からダウンロードした Java クライアント JAR ファイルには WebLogic Web サービスを呼び出すために必要なすべてのクラスが含まれます。

ただし、クライアント アプリケーションが Apache のリテラル XML エンコーディングを使用している場合は、Java クライアント JAR ファイルには必要なファイルすべては含まれません。クライアント JAR ファイルのサイズはそれほど大きくないのが普通です。

以下に、追加で必要になる可能性があるクラスを示します。

クライアント アプリケーションを実行するときに CLASSPATH 環境変数をそれぞれの場所に設定するか、または wsgen Java Ant タスクを使用して Web サービスをアセンブルするときに build.xml ファイル内のclientjar 要素を使用して、これらのクラスを含めることができます。

クライアント アプリケーションで必要なクラスの完全なリストを取得するには、アプリケーションをコンパイルしてから -verbose フラグを指定して実行します。これにより必要なすべてのクラスがリストされます。

 

back to top previous page next page