Web サービスクライアントの作成

Web サービスオペレーションを呼び出すプロキシクライアントまたはダイナミッククライアントを作成できます。

プロキシクライアントは、特定の Web サービスのために WSDL ファイルから生成されたローカルプロキシ上にメソッドを呼び出します。プロキシオブジェクトは、リモート Web サービスとの対話を処理します。プロキシの生成には WSDL2Java ツールを使用します。WSDL2Java ツールの詳細については、 「WSDL ドキュメントの操作」 を参照してください。

ダイナミッククライアントは、Axis クライアント API を直接呼び出すことによってオペレーションを呼び出す JSP または Java クラスです。また、JRun には Web サービスタグライブラリが用意されています。これは、Axis クライアント API へのラッパーとして動作する JSP カスタムタグライブラリです。

プロキシクライアント

このセクションでは、JSP ベースのクライアントから Web サービスプロキシを呼び出す方法を説明します。Web サービスプロキシを生成する方法の詳細については、弟 20 章、「WSDL ドキュメントの操作」を参照してください。

JSP ベースのプロキシクライアントの作成および使用

プロキシコードを作成したら、Web サービスプロキシオブジェクトをインスタンス化してそのメソッドを呼び出すことによってターゲット Web サービスオペレーションを呼び出すプロキシクライアントを作成する必要があります。JSP ベースのプロキシクライアントのサンプルおよびそのソースコードは、samples JRun サーバの Web サービスサンプルアプリケーション内にあります。

JSP ベースのプロキシクライアントを作成するには

  1. プロキシファクトリおよびプロキシをインスタンス化します。次に例を示します。
    <%
    proxy.SampleServiceService stubFactory =
    new proxy.SampleServiceService();
    proxy.Sample stub = stubFactory.getSampleService();
    %>
    
  2. プロキシのメソッドを呼び出し、結果をページにプリントします。次に例を示します。
    <%= stub.getResult(3)%>
    

ダイナミッククライアント

JSP ベースおよびオブジェクトベースのダイナミッククライアントは、Axis クライアント API 内のメソッドを呼び出して Web サービスオペレーションを呼び出します。Axis クライアント API の詳細については、<JRun のルートディレクトリ>/docs/html/thirdparty/axis directory の『Axis User Guide』を参照してください。

JSP スクリプトレットベースのダイナミッククライアントの使用

このセクションでは、JSP スクリプトレットベースのダイナミッククライアントに使用するデザインパターンを説明します。クライアントのサンプルおよびそのソースコードは、samples JRun サーバの Web サービスサンプルアプリケーション内にあります。サンプルクライアントには、パスワード保護された Web サービス用のものもあります。

JSP スクリプトレットベースのダイナミッククライアントを作成するには

  1. 次のインポートステートメントを追加します。
    <%@page import=
    "org.apache.axis.client.Call,
    org.apache.axis.client.Service,org.apache.axis.encoding.XMLType,
    javax.xml.rpc.ParameterMode" %>
    
  2. エンドポイント URL の変数、つまり SOAP メッセージの送信先を割り当てます。次に例を示します。
    <% String endpoint =
    "http://nagoya.apache.org:5049/axis/servlet/AxisServlet"; %>
    
  3. Axis の Service および Call オブジェクトをインスタンス化します。これらのオブジェクトは、呼び出すサービスに関するメタデータを保管します。
    <%
    Service service = new Service();
    Call call = (Call) service.createCall();
    
  4. Web サービスのエンドポイントアドレスを設定します。次に例を示します。
    call.setTargetEndpointAddress(new java.net.URL(endpoint));
    
  5. 呼び出す Web サービスオペレーション (メソッド) の名前を設定します。 次に例を示します。
    call.setOperationName("echoString");
    
  6. SOAP メッセージの本文で使用するネーム空間を設定します。次に例を示します。
    call.setProperty(Call.NAMESPACE, "http://soapinterop.org/");
    %>
    
  7. パラメータ名を設定します。次に例を示します。
    call.addParameter("testParam", XMLType.XSD_STRING,Call.PARAM_MODE_IN);

    メモ:  このコード例は、定数 XMLType.XSD_STRING をパラメータのデータタイプとして指定します。Axis データタイプの詳細については、 「Axis ビルトインデータタイプ」 を参照してください。

  8. 戻りタイプを設定します。次に例を示します。
    call.setReturnType( XMLType.XSD_STRING );
  9. Web サービスを呼び出し、結果をページにプリントします。例を次に示します。
    <%=call.invoke(new Object[] {"Hello!"})%>
    

次の JSP には、前の手順で示したすべての要素が含まれています。

%@page import="org.apache.axis.client.Call,
org.apache.axis.client.Service,org.apache.axis.encoding.XMLType,
javax.xml.rpc.ParameterMode" %>
<% String endpoint =
"http://nagoya.apache.org:5049/axis/servlet/AxisServlet";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endpoint));
call.setOperationName("echoString");
call.setProperty(Call.NAMESPACE, "http://soapinterop.org/");
call.addParameter("testParam", XMLType.XSD_STRING,
Call.PARAM_MODE_IN); call.setReturnType( XMLType.XSD_STRING );%>
<%=call.invoke(new Object[] {"Hello!"})%>

オブジェクトベースのダイナミッククライアントの使用

このセクションでは、オブジェクトベースのダイナミッククライアントのために使用するデザインパターンを説明します。オブジェクトベースのダイナミッククライアントでは、それに対応するスクリプトレットベースのものと同じコードを使用しますが、ただし、シンタックスは標準 Java シンタックスを使用します。

オブジェクトベースのダイナミッククライアントを作成するには

  1. 次のインポートステートメントを追加します。
    import org.apache.axis.client.Call;
    import org.apache.axis.client.Service;
    import org.apache.axis.encoding.XMLType;
    import javax.xml.rpc.ParameterMode;
    
  2. エンドポイント URL の変数、つまり SOAP メッセージの送信先を割り当てます。次に例を示します。
    String endpoint = "http://nagoya.apache.org:5049/axis/servlet
    /AxisServlet";
    
  3. Axis の Service および Call オブジェクトをインスタンス化します。これらのオブジェクトは、呼び出すサービスに関するメタデータを保管します。
    Service service= new Service();
    Call call = (Call) service.createCall();
    
  4. Web サービスのエンドポイントアドレスを設定します。次に例を示します。
    call.setTargetEndpointAddress( new java.net.URL(endpoint) );
    
  5. 呼び出す Web サービスオペレーション (メソッド) の名前を設定します。

    次に例を示します。

    call.setOperationName( "echoString" );
    
  6. SOAP メッセージの本文で使用するネーム空間を設定します。次に例を示します。
    call.setProperty( Call.NAMESPACE, "http://soapinterop.org/" );
    
  7. パラメータ名を設定します。次に例を示します。
    call.addParameter("testParam", 
    org.apache.axis.encoding.XMLType.XSD_STRING,Call.PARAM_MODE_IN);
    
  8. 戻りタイプを設定します。次に例を示します。
    call.setReturnType( XMLType.XSD_STRING );
    
  9. Web サービスを呼び出します。次に例を示します。
    String ret = (String) call.invoke( new Object[] { "Hello!" } );
    
  10. 結果をコンソールにプリントします。次に例を示します。
    System.out.println("Sent 'Hello!', got '" + ret + "'");
    

次のクライアントには、前の手順で示したすべての要素が含まれています。このクライアントは、Axis の配布用サンプルおよび <JRun のルートディレクトリ>/docs/html/thirdparty/axis ディレクトリの『Axis User Guide』に含まれています。

package samples.userguide.example1;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
package samples.userguide.example1;
import org.apache.axis.encoding;
public class TestClient
{
   public static void main(String [] args) {
       try {
           String endpoint = 
                    "http://nagoya.apache.org:5049/axis/servlet/
AxisServlet"; 
           Service  service = new Service();
           Call     call    = (Call) service.createCall();
           call.setTargetEndpointAddress( new java.net.URL(endpoint) );
           call.setOperationName( "echoString" );
           call.setProperty( Call.NAMESPACE, "http://soapinterop.org/" 
);
           call.addParameter("testParam", XMLType.XSD_STRING, 
  Call.PARAM_MODE_IN);
           call.setReturnType( XMLType.XSD_STRING );
           String ret = (String) call.invoke( new Object[] { "Hello!" 
} );
           System.out.println("Sent 'Hello!', got '" + ret + "'");
       } catch (Exception e) {
           System.err.println(e.toString());
       }
   }
}

JSP タグベースのダイナミッククライアントの使用

Web サービスタグライブラリを使用すると、JSP カスタムタグを使用して Axis クライアント API にアクセスできます。サービスのエンドポイント URL およびオペレーションの名前とパラメータがわかっていれば、タグライブラリを使用してオペレーションを呼び出すことができます。

JSP タグベースのダイナミッククライアントのサンプルおよびそのソースコードは、samples JRun サーバの Web サービスサンプルアプリケーション内にあります。Web サービスのタグライブラリを使用するには、<JRun のルートディレクトリ>/servers/samples/ws-ear/wsc-war/WEB-INF/lib ディレクトリから Web アプリケーションの WEB-INF/lib ディレクトリヘ webservicetag.jar ファイルをコピーします。JRun samples をインストールしていない場合は、samples を含んでいるカスタムインストールを実行する必要があります。

このセクションでは、JSP タグベースのダイナミッククライアントのデザインパターンを説明します。ライブラリ内の各タグの説明は、 「Web サービスタグライブラリリファレンス」 を参照してください。

基本的なデータタイプのみを使用するサービスオペレーションの呼び出しは、invoke タグ内のオペレーションの指定、およびネストされた param タグ内のオペレーションパラメータ値の指定だけなので簡単です。

複雑なデータタイプを使用するサービスでは、beanmapping タグを使用して、Axis にビルトインされた JavaBeans シリアライザとユーザーが定義した bean との間でタイプをマッピングできます。詳細については、弟 23 章、「Axis bean シリアライザによるデータタイプマッピング」を参照してください。

inout パラメータ、すなわち Web サービスによって変更できるパラメータを使用するサービスの場合は、inout のパラメータモードを指定できます。

デフォルトでは、invoke タグは RPC エンコードの SOAP エンコードを使用します。.NET Web サービスが一般的に使用しているドキュメントリテラルや、ドキュメントエンコード、またはラップされたドキュメントリテラルの SOAP エンコードスタイルも使用できます。

JSP タグベースのクライアントを作成するには

  1. ページの先頭に、次の行を加えます。
    <%@ taglib prefix="web" uri="WEB-INF/lib/webservicetag.jar" %>
    

    この行は、JSP の taglib ディレクティブです。これによって、Web サービスタグライブラリのタグが "web" 接頭辞を使用し、タグライブラリが Web アプリケーションの WEB-INF/lib ディレクトリの webservicestag.jar ファイルにあることを指定します。

  2. (オプション) Web サービスオペレーションパラメータの変数を割り当てます。

    次のサンプルコードでは、通貨の両替レートを変換する Microsoft SOAP Web サービスで使用する通貨コードの変数を設定します。USD は米ドルを表し、BRL はブラジルのレアルを表します。

    <% String str1="BRL";
    String str2="USD";%>
    
  3. invoke タグを使用して、Web サービスオペレーションを呼び出します。

    次の例では、デフォルト RPC エンコードの SOAP エンコードスタイルを使用する通貨変換 Web サービスを呼び出します。

    <web:invoke
    url="http://www.itfinity.net:8008/soap/exrates/default.asp"
    namespace="http://www.itfinity.net/soap/exrates/exrates.xsd"
    resulttype ="double"
    operation="GetRate"
    result="myresult">
    </web:invoke> 
    

    この invoke タグには、次の情報があります。

  4. invoke タグの本文 (</web:invoke> の直前) のオペレーションに対して、適切な param タグを指定します。

    次の例では、通貨変換 Web サービスの GetRate オペレーションの from および to の値を指定します。name の値に大文字を正しく使用していることを確認します。

    <web:param name="fromCurr" value="<%=str1%>"/>
    <web:param name="ToCurr" value="<%=str2%>"/>
    
  5. オペレーション結果をページにプリントします。

    次は、GetRate オペレーションが返した両替レートをプリントする例です。

    <%= pageContext.getAttribute("myresult") %>
    

次の JSP には、前の手順で示したすべての要素が含まれています。

<%@ taglib prefix="web" uri="webservicetag" %>
<% String str1="BRL";
String str2="USD";%>
<web:invoke
url="http://www.itfinity.net:8008/soap/exrates/default.asp"
namespace="http://www.itfinity.net/soap/exrates/exrates.xsd"
operation="GetRate"
resulttype="double"
result="myresult">
<web:param name="fromCurr" value="<%=str1%>"/>
<web:param name="ToCurr" value="<%=str2%>"/>
</web:invoke>
<%= pageContext.getAttribute("myresult") %>