Java API for XML-Based Web Services (JAX-WS) の Web サービス・クライアント・プログラミング・モデルは、ディスパッチ・クライアント API と動的プロキシー・クライアント API の両方をサポートします。ディスパッチ・クライアント API が動的クライアント・プログラミング・モデルであるのに対し、JAX-WS 用の静的クライアント・プログラミング・モデルは動的プロキシー・クライアントです。 ディスパッチ・クライアントおよび動的プロキシー・クライアントは、JAX-WS Web サービスの同期呼び出しと非同期呼び出しの両方を使用可能にします。
XML ベースの Web サービスでは、Web サービスと Web サービス・クライアント間の通信に XML メッセージを使用します。 JAX-WS API では、Java メソッド呼び出しとそれと関連した XML メッセージ間の変換の詳細を簡素化し、非表示にするための、上位メソッドを提供します。 ただし、ユーザーは XML メッセージ・レベルで作業したい場合もあります。 このため、XML メッセージ・レベルでのサービス呼び出しが、ディスパッチ・クライアント API によりサポートされています。 ディスパッチ・クライアント API の javax.xml.ws.Dispatch は、動的 JAX-WS クライアント・プログラミング・インターフェースです。 ディスパッチ・クライアントを書き込むには、ディスパッチ・クライアント API、サポートされているオブジェクト・タイプ、そして関連の Web サービス記述言語 (WSDL) ファイルのメッセージ表記について、専門知識を身につける必要があります。ディスパッチ・クライアントはデータを MESSAGE モードか、PAYLOAD モードで送信できます。javax.xml.ws.Service.Mode.MESSAGE モードを使用する場合、ディスパッチ・クライアントは <soap:Envelope>、<soap:Header>、および <soap:Body> エレメントを含む、全 SOAP エンベロープの提供を受け持ちます。javax.xml.ws.Service.Mode.PAYLOAD モードを使用する場合は、ディスパッチ・クライアントは <soap:Body> の内容の提供のみを行い、 JAX-WS はペイロードを <soap:Envelope> エレメントに含めます。
Dispatch<Source> dispatch = … create a Dispatch<Source> Source request = … create a Source object Source response = dispatch.invoke(request);ディスパッチ・パラメーター値によって invoke() メソッドの戻り値の型が決定します。
ディスパッチ・クライアントの使用法について詳しくは、JAX-WS 2.0 仕様の第 4 章セクション 3 を参照してください。
静的クライアントの JAX-WS 用のプログラミング・モデルは、動的プロキシー・クライアントと呼ばれます。 動的プロキシー・クライアントは、サービス・エンドポイント・インターフェース (SEI) (指定する必要があります) に基づいて Web サービスを呼び出します。 動的プロキシー・クライアントは、Java API for XML-based RPC (JAX-RPC) プログラミング・モデルのスタブ・クライアントに似ています。 JAX-WS 動的プロキシー・クライアントと JAX-RPC スタブ・クライアントはどちらも WSDL ファイルから生成されたサービス・エンドポイント・インターフェース (SEI) に基づいていますが、両者には大きな違いがあります。 動的プロキシー・クライアントは Java 5 動的プロキシー機能を使用して、ランタイムに動的に生成されるのに対して、JAX-RPC ベースのスタブ・クライアントはツールにより生成される、移植できない Java ファイルである点です。 JAX-RPC スタブ・クライアントとは異なり、動的プロキシー・クライアントでは別のベンダーのアプリケーション上でクライアントを実行する前に、スタブを再生成する必要がありません。これは、生成されるインターフェースに特定のベンダー情報が必要ないからです。
動的プロキシー・インスタンスは基本 Java ランタイム環境バージョン 5 で java.lang.reflect.Proxy クラスを拡張し、動的プロキシー機能を利用します。 クライアント・アプリケーションは次に、ランタイムが SEI を表す Java オブジェクトを動的に作成している間に、プロキシー・インスタンスを作成するのに使用されるインターフェースを提供します。
動的プロキシー・クライアントの使用法について詳しくは、JAX-WS 2.0 仕様の第 4 章を参照してください。