Java API for XML-Based Web Services (JAX-WS) は、 Java API for XML-based RPC (JAX-RPC) プログラミング・モデルが提供する基盤を補完する、次世代の Web サービス・プログラミング・モデルです。JAX-WS を使用すると、動的プロキシーおよび Java アノテーションの使用により、プラットフォームからより独立した Web サービスおよびクライアントの開発が容易になります。
JAX-WS 2.0 は、標準的なアノテーション・ベースのモデルをサポートして Web サービス・アプリケーションおよびクライアントを開発することにより、 アプリケーションの開発を簡素化する、新しいプログラミング・モデルです。 JAX-WS 2.0 仕様は、戦略的観点から、より文書中心のメッセージング・モデルを指向する今日の業界傾向に合わせてあり、また、JAX-RPC により定義されたリモート・プロシージャー・コール・プログラミング・モデルに代わるものです。JAX-RPC プログラミング・モデルとアプリケーションは本製品で引き続きサポートされますが、JAX-RPC には制限があり、多様で複雑な文書中心のサービスはサポートしません。 JAX-WS は Web サービスを開発するための戦略的なプログラミング・モデルであり、Java Platform, Enterprise Edition 5 (Java EE 5) の必要不可欠な部分です。
JAX-WS プログラミング標準の実装では、Web サービスとクライアントの開発について次の拡張機能を提供しています。
JAX-WS API を使用することにより、Web サービスとクライアントの開発は、Java アプリケーションに対するより優れたプラットフォーム独立性により簡素化されます。 JAX-WS では動的プロキシー・メカニズムを利用して、プラグ可能プロバイダーによる正式な代行モデルを提供します。 これは JAX-RPC に対する機能拡張で、ベンダー固有の呼び出し用スタブの生成に依存します。
JAX-WS では、その Java クラスが Web サービスであることを示すため、メタデータによる Java クラスのアノテーション付けをサポートしています。 JAX-WS は、Metadata Facility for the Java Programming Language (JSR 175) 仕様および Web Services Metadata for the Java Platform (JSR 181) 仕様に基づくアノテーションと、JAX-WS 2.0 仕様で定義されたアノテーションの使用をサポートしています。 Java ソースおよび Java クラス内でアノテーションを使用すると、 Web サービスの開発が簡素化されます。 このようにアノテーションを使用すると、通常はデプロイメント記述子ファイル、WSDL ファイル、または XML ファイルおよび WSDL ファイルからソース成果物へのメタデータのマッピング から取得される追加情報の一部を定義することで、Web サービスの開発が簡素化されています。
@WebService public class QuoteBean implements StockQuote { public float getQuote(String sym) { ... } }@WebService アノテーションはサーバー・ランタイムに対して、その Bean 上のすべての public メソッドを Web サービスとして公開するように指示します。 さらに追加する細分度レベルは、個々のメソッドまたはパラメーターで追加のアノテーションを加えることにより、制御できます。 アノテーションの使用によって、Java 成果物を Web サービスとして公開することがたいへん簡単になります。 さらに、成果物は、WSDL ファイルから始まるトップダウン・マッピング・ツールの一部を使用して作成されるため、 アノテーションは、ソース・ファイルとともにメタデータを取り込む手段として、ソースおよび Java クラス内に含まれます。
また、アノテーションを使用することにより、チーム構造内での Web サービスの開発が向上します。 これは、JAX-RPC Web サービスで必要に応じて、単一のデプロイメント記述子または共通デプロイメント記述子で各 Web サービスを定義する必要がないからです。 JAX-WS Web サービスでアノテーションを利用することにより、サービスと必要なメタデータの平行開発が可能です。
JAX-WS では、Web サービスは同期でも非同期でも呼び出されます。 JAX-WS は、非同期に Web サービスを呼び出す場合に、ポーリング・メカニズムとコールバック・メカニズムの両方のサポートを追加します。 ポーリング・モデルを使用する場合、クライアントは要求を発行し、戻ってくる応答オブジェクトを受け取りますが、 このオブジェクトはサーバーが応答したかどうかを判別するためにポーリングされます。 サーバーが応答した場合、実際の応答が取り出されます。 コールバック・モデルを使用する場合、クライアントはコールバック・ハンドラーを提供してインバウンド応答オブジェクトを受け入れ、処理します。 ポーリング・モデルもコールバック・モデルも、応答が戻るのを待たないでクライアントが作業処理の継続に集中 できるようにする一方で、Web サービスを呼び出すための、より動的かつ効率的なモデルを提供しています。
@WebService public interface CreditRatingService { // sync operation Score getCreditScore(Customer customer); // async operation with polling Response<Score> getCreditScoreAsync(Customer customer); // async operation with callback Future<?> getCreditScoreAsync(Customer customer, AsyncHandler<Score> handler); }
CreditRatingService svc = ...; Future<?> invocation = svc.getCreditScoreAsync(customerFred, new AsyncHandler<Score>() { public void handleResponse ( Response<Score> response) { Score score = response.get(); // do work here... } } );
CreditRatingService svc = ...; Response<Score> response = svc.getCreditScoreAsync(customerFred); while (!response.isDone()) { // do something while we wait } // no cast needed, thanks to generics Score score = response.get();
JAX-WS は、Web サービスの開発をさらに簡素化するために、リソース注入をサポートしています。 JAX-WS では Java EE 5 のこの重要機能を使用して、Java ランタイム環境における共通リソースの作成と初期化という負担を、Web サービス・アプリケーションからアプリケーション・コンテナー環境そのものに移行しています。 JAX-WS は、ランタイムでのリソース注入とアプリケーション・ライフ・サイクル用に、JSR-250 で定義されているアノテーションのサブセットをサポートしています。
Feature Pack for Web Services は、リソース注入用に @Resource アノテーションの JAX-WS による使用をサポートしています。@Resource アノテーションは、Java Platform, Enterprise Edition 5 (Java EE 5) に含まれている JSR-250, Common Annotations 仕様で定義されています。 @Resource アノテーションをサービスのエンドポイント実装に置くことにより、リソース注入を要求し、 その特定のエンドポイント呼び出しに関連した javax.xml.ws.WebServiceContext インターフェースを収集することができます。 エンドポイントで @Resource アノテーションが見つかると、そのエンドポイントはサーブレットがサービスに置かれる前に、適切な値を持つ、アノテーションを付けた変数を追加します。 WebServiceContext インターフェースから、getMessageContext() メソッドを使用して、特定のメソッド呼び出しと関連した要求の MessageContext を収集できます。
Feature Pack for Web Services は、WebServiceContext を JAX-WS エンドポイント実装に注入する @Resource アノテーションの使用のみをサポートしています。 これは JAX-RPC エンドポイントではサポートされません。
@WebService public class MyService { @Resource private WebServiceContext ctx; public String echo (String input) { … } }
リソース注入について詳しくは、JAX-WS 2.0 仕様のセクション 5.2.1 および 5.3 を参照してください。
JAX-WS では Java オブジェクトと XML 文書間のマッピング用バインディング・テクノロジーとして、JAXB 2.0 API およびツールを利用しています。 JAX-WS ツールは、Java オブジェクトと XML 文書間の双方向マッピング用のデフォルトのデータ・バインディングを JAXB ツールに依存しています。 JAXB 2.0 データ・バインディングは、JAX-RPC 仕様により記述されるデータ・バインディングに代わるものです。
JAX-WS 用の動的クライアントはディスパッチ・クライアント (javax.xml.ws.Dispatch) と呼ばれます。ディスパッチ・クライアントは、XML メッセージング志向のクライアントです。 データは PAYLOAD モードか MESSAGE モードで送信されます。 PAYLOAD モードを使用する場合は、ディスパッチ・クライアントは <soap:Body> の内容の提供のみを行い、 JAX-WS が <soap:Envelope> および <soap:Header> エレメントを追加します。 MESSAGE モードを使用する場合は、ディスパッチ・クライアントは <soap:Envelope>、<soap:Header>、および <soap:Body> エレメントを含む、全 SOAP エンベロープを提供し、JAX-WS はメッセージに何も追加しません。 ディスパッチ・クライアントは、コールバック・メカニズムまたはポーリング・メカニズムを使用する、非同期呼び出しをサポートします。
静的クライアントの JAX-WS 用のプログラミング・モデルは、プロキシー・クライアントと呼ばれます。 プロキシー・クライアントは、Service Endpoint interface (SEI) (指定する必要があります) に基づいて Web サービスを呼び出します。
JAX-WS を使用することにより、イメージやファイルのようなバイナリー添付ファイルを Web サービス要求とともに送信できます。 JAX-WS は、Message Transmission Optimization Mechanism (MTOM) で規定されているバイナリー・データの最適化伝送のサポートを追加します。
JAX-WS は、次のバインディング・テクノロジーをエンド・ユーザーに公開しています: XML Source、SOAP Attachments API for Java (SAAJ) 1.3、Java Architecture for XML Binding (JAXB) 2.0。XML ソースにより、ユーザーは、処理するソース・オブジェクト内のデータを表す javax.xml.transform.Source を、ランタイムに渡すことができます。 SAAJ 1.3 には、ペイロードそのものだけではなく、全インターフェース内のすべての SOAP 文書を渡す機能が付きました。 これは、インターフェース内で SAAJ SOAPMessage オブジェクトを渡すクライアントによって実行されます。JAX-WS では Java と XML 間のデータ・バインディング・テクノロジーの選択肢として JAXB 2.0 サポートを利用しています。
SOAP 1.2 のサポートが JAX-WS 2.0 に追加されました。JAX-WS では、イメージやファイルのようなバイナリー添付ファイルを Web サービス要求とともに送信できるように、SOAP 1.1 と SOAP 1.2 の両方をサポートしています。 JAX-WS は、MTOM で規定されているバイナリー・データの最適化伝送のサポートを追加します。
JAX-WS は、JAX-WS Web サービスの移植可能成果物を生成するために wsgen および wsimport コマンド行ツールを提供しています。 JAX-WS Web サービスを作成する場合、WSDL ファイルまたは実装 Bean クラスのいずれかから開始することができます。 実装 Bean クラスから開始する場合は、wsgen コマンド行ツールを使用して、WSDL ファイル (要求があった場合) を含むすべての Web サービス・サーバー成果物を生成します。 WSDL ファイルから開始する場合は、wsimport コマンド行ツールを使用して、サーバーまたはクライアント用のすべての Web サービス成果物を生成します。 wsimport コマンド行ツールは、スキーマ定義を使用して WSDL ファイルを処理し、移植可能な成果物を生成します。 これには、サービス・クラス、サービス・エンドポイント・インターフェース・クラス、および対応する XML スキーマの JAXB 2.0 クラスが含まれます。