訳:日本アイ・ビー・エム(株) ソフトウェア事業部 米持 幸寿

このドキュメントは、Apache SOAP 2.0レベルのものを日本語訳したもので、 最新版のものとは異なる可能性があります。また、ウェブ上で見る場合、一部 のリンクが切れている可能性があります。Apache SOAPのディレクトリの該当 ファイルと置き換えることで、オリジナルのページにリンクさせることができ ます。

Apache-SOAP Version 2.0: ユーザーズ・ガイド

2000年8月

内容

Apache-SOAP の機能

Apache-SOAP で Remote Procedure Calls を行う

パッケージ「org.apache.soap.rpc」が、SOAPを使ったRPCの実行をサポートします。Apache-SOAP モデルは次のようなものです。

メソッド呼び出しの要素 (訳注:SOAP-ENV:Body直下の子供要素のこと)のURI が、リモート側のオブジェクトID として使われます。クライアント側のAPI はメソッド名、オブジェクトID、パラメーターを持った「Call」オブジェクト(org.apache.soap.rpc.Call)を持っています。Javaデータ・タイプとXML間の直列化/非直列化は

などのインターフェイスによってサポートされます。それぞれに直列化機能/非直列化機能を実装する必要があります。
ビルトインのエンコーダー/デコーダーは、SOAPマッピング・レジストリにあらかじめ登録されているこれらのインターフェイスの簡単な実装です。

Callオブジェクトが準備されれば、それの「invoke(URL,String)」メソッドが呼び出せるようになります。このとき、実行するためのSOAPエンドポイントとしてURLが、2番目の引数がSOAPActionヘッダーの値として使われます。
このメソッドは実際のレスポンス(あれば)か、エラーのときは fault を含んだ Responseオブジェクト(org.apache.soap.rpc.Response)を戻り値として返します。

RPCがHTTP経由で行われるときは、サーバーサイドのRPCルーター(webappディレクトリーのrpcrouter.jsp)が「POST済みエンベロープ」を受取り、非直列化してCallオブジェクトを構築します。そして、サービス・マネージャー(rg.apache.soap.server.ServiceManager) の中から該当のオブジェクトIDを探すことでターゲットになるオブジェクトを見つけ、メソッド名を検査した後、目的のオブジェクト上のメソッドを呼び出すために invoke(Object) を呼び出します。戻り値はResultオブジェクト(org.apache.soap.rpc.Result)であり、直列化されてHTTPレスポンスにて返信されます。

RPCがSMTPで行われるときは、実行待ちになっているメールボックスやサイトに送られます。このようなメール・メッセージを受け取り、HTTP-SOAPエンド・ポイントにポストし、結果を受け取って、もとの送信者にメールで転送するようなPOP3−HTTP−SMTPブリッジを提供しています。受け側ではPOP3サーバーを監視し、メッセージを受取り、内容を取り出して非直列化してからレスポンスを呼び出し元へ返します。

RPC over SMTP

Apache-SOAPで RPC over SMTP を行うには、いくつかの電子メールのインフラが必要です。具体的には、SMTPサーバーとPOP3サーバーとサーバー・サイドHTTPルーターと同じように使えるような電子メールアドレスです。すべてのSOAP RPC呼び出しは、それを処理し、送信元に結果を送り返すような特定のアドレスに送信されることになります。サーバー側のインフラが重複するのを避けるために、POP3を通してSOAPルーターの電子メールアドレスにメールが送信され、SOAPエンベロープが現存するHTTP SOAP環境にポストされ、SMTP経由で電子メールを送信元に返信するような、SMTPのサーバー側の実装がされています。

クライアント側では、アプリケーションはSOAPルーター電子メール・アドレスに対してSOAPリクエストをSMTP経由で送信します。このとき、レスポンスが返送されるべきアドレスを含めます。そして、レスポンスが来たかどうかを調べるためにPOP3サーバーを監視します。メールが来ると、エンベロープがパースされ、レスポンスが取り出されます。私たちは、alphaWorks の POP3 bean を使っています。これは、電子メールの選択ダウンロードをサポートしていません。結果的に、現在の実装では「次のメッセージ」がリクエストに対してのレスポンスを含んだメッセージとなるようにクライアント・リプライ・アドレスに到着することを信頼することにしています。そのため、現在の実装では同時に同じリプライ・アドレスに対して複数のRPCコールを発信するようなことは許されません。

注意: RPC over SMTP を行うには、あなたの所持している電子メールアドレスを絶対に使わないようにしてください。複数のPOP3アカウントが設定できない場合には、無料のPOP3電子メールプロバイダ(www.mailandnews.com など)が多数存在します。

サービスの管理

Apache-SOAP は、サービスを管理するためのツールを提供しています。2つのサービス管理ツールがあります。1つはブラウザから使うことのできるHTML形式のものであり、もう1つはコマンドライン・ツールです。

注意:Apache-SOAPサーバーに、すでにサービスがディプロイされていると、このバージョンはそれらのサービスを認識しません。なぜなら、サービスをシリアライズするためのクラスが変更されているからです。

サービス管理のためのサーバー側管理ツールの実行

Apache-SOAP管理ツールを使って、ウェブ・ブラウザからサービスをディプロイしたりアン・ディプロイしたり、SOAPサーバーにディプロイされているサービスの定義の一覧を見ることができます。

ブラウザで http://hostname:port/soap ( ローカルなら、http://localhost/soap) を見てください。次の3つのボタンがある、「Apache-SOAP Admin」というページが表示されます。

これらの機能の使い方は、サービスのディプロイに必要な情報の性質を知っていればすぐわかります。これは、次の章で説明します。

サービスのディプロイ情報

ここで、サービスがディプロイされるときに定義される情報を振り返りましょう。これらの情報は機能をディプロイするときに提供されなければならず、「List」機能によって見ることができます。これらをサービスの「プロパティ」と呼ぶことにします。

サービス管理のためのコマンド・ライン・ツールを使う

「java org.apache.soap.server.ServiceManagerClient」とコマンドラインで入力することで実行できます。次のようなものが表示されます。

% java org.apache.soap.server.ServiceManagerClient
Usage: java org.apache.soap.server.ServiceManagerClient url operation arguments
where
        url is the Apache-SOAP router's URL whose services are managed
        operation and arguments are:
                deploy deployment-descriptor-file.xml
                list
                query service-name
                undeploy service-name

サービスをディプロイする例:

% java org.apache.soap.server.ServiceManagerClient http://hostname:port/soap/servlet/rpcrouter deploy foo.xml

ここで、foo.xml はディプロイメンt・ディスクリプタで、URLは導入時に設定した内容にします。

SOAPをデバッグするためのツール

さらに、Apache-SOAP は SOAP やその他の TCP プロトコルをデバッグするために使える「TCPトンネル/モニター」を提供しています。org.apache.soap.util.net.TcpTunnelGui クラスを実行すると、同じマシン上でポートを開き、リモートのhost/portの組み合わせに対してトンネルとして働きます。ポートに接続が確立されると、リモートのhost/portの組み合わせに対する接続がトンネルを通して作られ、二つのウィンドウに双方のデータの行き来が表示されます。同じように、リモートの host/port に対して接続するクライアントも、ローカルの host/port に対して接続することにより、双方のデータの流れを見ることができます。これは非常に有効なツールです。是非チェックを!

この実装の制限

次の SOAP v1.1 仕様の機能は、現在サポートされません。

前提条件等