9.16. Web サービスのクライアント
9.16.1. サービス リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Service
は WSDL サービスを表す抽象になります。 WSDL サービスは関連ポートの集合で、 それぞれが特定のプロトコルにバインドするポートタイプから構成されます。 また、特定のエンドポイントアドレスで使用可能になります。
ほとんどのクライアントの場合、 WSDL から生成されるスタブセットを使って開始します。 これらのうちのひとつはサービスになり、 そのサービスと動作させるためにそのクラスのオブジェクトを作成します (以下の 「静的な場合」 を参照)。
9.16.1.1. サービスの使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
静的な場合
ほとんどのクライアントは WSDL ファイルで開始し、 wsconsume のような jbossws ツールを使っていくつかのスタブを生成します。 これは通常、 膨大なファイル数となり、 そのうちのひとつがツリーのトップになります。 これがサービス実装クラスです。
生成される実装クラスは、1 つは引数なしでもうひとつは 2 つの引数を持ちそれぞれ wsdl の場所 (java.net.URL) とサービス名 (jvax.xml.namespace.QName) を表す 2 つのパブリックコンストラクターを持つことになると認識できます。
通常、 引数なしのコンストラクタを使用します。 この場合、 WSDL の場所とサービス名は WSDL にあります。 これらは生成されるクラスを修飾する WebServiceClient アノテーションから黙示的に設定されます。
次のコードスニペットは生成されたクラスから生成されるコンストラクターを示しています。
ダイナミックプロキシ の章には、サービスからのポート取得方法やポート上での操作の呼び出し方法について説明されています。XML ペイロードを直接作業する必要がある場合や SOAP メッセージ全体の XML 表記を作業する必要がある場合は、ディスパッチ をご覧ください。
動的な場合
動的な場合、 何も生成されないと Web サービスクライアントは Service.create
を使って Service インスタンスを作成します。 次のコードでこのプロセスを示します。
URL wsdlLocation = new URL("http://example.org/my.wsdl"); QName serviceName = new QName("http://example.org/sample", "MyService"); Service service = Service.create(wsdlLocation, serviceName);
URL wsdlLocation = new URL("http://example.org/my.wsdl");
QName serviceName = new QName("http://example.org/sample", "MyService");
Service service = Service.create(wsdlLocation, serviceName);
このような JBossWS の使用方法は推奨されていません。
9.16.1.2. ハンドラーリゾルバー リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
JAX-WS はハンドラーとして知られるメッセージ処理モジュール用の柔軟なプラグインフレームワークを提供しており、 JAX-WS ランタイムシステムの機能拡張に使用することができます。 Handler Framework ではハンドラーフレームワークについて詳細に説明されています。
Service
インスタンスは、 サービス毎やポート毎、 プロトコルバインディング毎にハンドラーセットを設定することができる getHandlerResolver
メソッドと setHandlerResolver
メソッドのペアで HandlerResolver
へのアクセスを提供します。
Service
インスタンスがプロキシまたは Dispatch
インスタンスの作成に使用されると、 現在そのサービスで登録されているハンドラーリゾルバーが要求されるハンドラーチェーンの作成に使用されます。続いて起こる Service
インスタンス用に設定されるハンドラーリゾルバーへの変更は前に作成されたプロキシあるいは Dispatch
のインスタンスにあるハンドラーには影響しません。
9.16.1.3. Executor リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Service
インスタンスは java.util.concurrent.Executor
で設定することができます。 次にエグゼキューターを使ってアプリケーションが要求するすべての非同期のコールバックが呼び出されます。Service
の setExecutor
と getExecutor
のメソッドを使ってサービス用に設定されるエグゼキューターを編集して読み出すことができます。