レベル: 中級 Russell Butek, Web Services Consultant, IBM Nicholas Gallardo, Staff Software Engineer, IBM
2006年 10月 06日 JAX-WS 2.0 は JAX-RPC 1.1 の後継です。この記事は、この 2 つのJava Web サービス・プログラミング・モデルを比較するシリーズの導入編です。
はじめに
Web サービスが登場してからしばらく経ちました。最初に SOAP がありましたが、SOAP は、メッセージがどのように見えるのかを記述できるのみでした。次に WSDL が登場しましたが、WSDL は、Web サービスを Java™ で作成する方法を記述していませんでした。次に JAX-RPC 1.0 が登場しましたが、数ヶ月使われた後、この仕様を作成した JCP (Java Community Process) の人達は JAX-RPC 1.0 に少し細工が必要なことに気付き、その結果 JAX-RPC 1.1 が登場しました。この仕様が 1 年ほど使われた後、JCP の人達は、もっと良い、JAX-RPC 2.0 を作ろうとしました。主な目的は業界の方向性と整合させることでしたが、業界は RPC による Web サービスだけではなく、メッセージ指向の Web サービスも行っていました。そこで名前から「RPC」が消され、「WS」(もちろん Web サービスを表します) で置き換えられました。というわけで、JAX-RPC 1.1 の後継は JAX-WS 2.0、つまり Java API for XML-based Web services なのです。
同じままなのは何か
JAX-RPC 1.1 と JAX-WS 2.0 の違いを書き出す前に、同じまま変わっていないものを説明すべきでしょう。
- JAX-WS は相変わらず SOAP 1.1 over HTTP 1.1 をサポートしているので、インターオペラビリティーには影響がなく、相変わらず同じメッセージを流すことができます。
- JAX-WS は相変わらず WSDL 1.1 をサポートしているため、WSDL 1.1 に関して学んだことは相変わらず有効です。WSDL 2.0 仕様は完成に近づいていますが、JAX-WS 2.0 が最終的に決定した時点では、まだ作業中のままでした。
違うのは何か
- SOAP 1.2
JAX-RPCと JAX-WS は SOAP 1.1 をサポートしています。JAX-WS は SOAP 1.2 もサポートしています。
- XML/HTTP
WSDL 1.1 仕様は HTTP バインディングを定義しました。HTTP バインディングは、SOAP を使わずに HTTP で XML メッセージを送信するための手段です。JAX-RPC は HTTP バインディングを無視しました。JAX-WS は HTTP バインディングをサポートしています。
- WS-I の Basic Profile
JAX-RPC は WS-I の BP (Basic Profile) バージョン 1.0 をサポートしています。JAX-WS は BP 1.1 をサポートしています。(WS-I は Web サービスのインターオペラビリティーのための組織です。)
- 新しい Java 機能
- JAX-RPC は Java 1.4 にマップされます。JAX-WS は Java 5.0 にマップされます。JAX-WS は、Java 5.0 の新機能の多くに依存しています。
- J2EE 1.4 の後継である Java EE 5 では JAX-WS のサポートが追加されていますが、JAX-RPC も相変わらずサポートされています。これは今日の Web サービス入門者にとっては、ややこしく思えるかもしれません。
- データ・マッピング・モデル
- JAX-RPC は独自のデータ・マッピング・モデルを持っており、これはすべてのスキーマ型の約 90% をカバーしています。このマッピング・モデルでカバーされないものは、javax.xml.soap.SOAPElement にマップされます。
- JAX-WS のデータ・マッピング・モデルは JAXB です。JAXB は、すべての XML スキーマへのマッピングを約束しています。
- インターフェース・マッピング・モデル
JAX-WS の基本的なインターフェース・マッピング・モデルは、JAX-RPC と大きく異なってはいませんが、
- JAX-WS のモデルは Java 5.0 の新しい機能を利用しています。
- JAX-WS のモデルは非同期機能を導入しています。
- 動的プログラミング・モデル
- JAX-WS's dynamic client model is quite different from JAX-RPC's. Many of the changes acknowledge industry needs:
- JAX-WS の動的クライアント・モデルは、JAX-RPC とは大きく異なります。変更の多くは、業界からの次のような要望を認識したことによるものです。
- メッセージ指向の機能の導入
- 動的な非同期機能の導入
- また JAX-WS は、JAX-RPC にはない、動的なサーバー・モデルも追加しています。
- MTOM (Message Transmission Optimization Mechanism)
JAX-WS は、新しい添付仕様である MTOM のサポートを (JAXB によって) 追加しています。Microsoft は SOAP with Attachment の仕様には賛同しませんでしたが、MTOM は全員にサポートされているようです。そのため、添付に関するインターオペラビリティーは現実になるはずです。
- ハンドラー・モデル
- ハンドラー・モデルは、JAX-RPC と JAX-WS との間で大きく変更されました。
- JAX-RPC ハンドラーは SAAJ 1.2 に依存しています。JAX-WS ハンドラーは新しい SAAJ 1.3 仕様に依存しています。
今回のヒントのこれから先では、SOAP 1.2 と XML/HTTP、WS-I Basic Profile、そして Java 5 について説明します。上にあげた中の、それ以外の 5 つの項目は、このシリーズの今後の記事で説明します。
SOAP 1.2
 |
SOAP エンコーディング SOAP エンコーディングは、Web サービスのコミュニティーから好まれなくなりました。SOAP エンコーディングは WS-I basic profile ではサポートされていません。そのため Java Web サービスの最新の姿である JAX-WS では、SOAP エンコーディングを許していません。JAX-RPC は SOAP エンコーディングをサポートしているため、どうしても SOAP でエンコーディングされたメッセージを使う必要がある場合には、JAX-RPC を使い続ける必要があります。 |
|
プログラミング・モデルの観点から見ると、SOAP 1.1 と SOAP 1.2 との間には、ほとんど差がありません。Java プログラマーが唯一違いを感ずるのはハンドラーを使う場合ですが、これについては今後の記事で説明する予定です。SAAJ 1.3 は SOAP 1.2 をサポートするように更新されています。
XML/HTTP
SOAP 1.2 の場合と同じく、プログラミング・モデルの観点から見ると、SOAP/HTTP メッセージと XML/HTTPメッセージとの間には、ほとんど差がありません。Java プログラマーが唯一違いを感ずるのはハンドラーを使う場合ですが、これについては今後の記事で説明する予定です。HTTP バインディングは、独自のハンドラー・チェーンと独自のメッセージ・コンテキスト・プロパティー・セットを持っています。
WS-I の basic profile
JAX-RPC 1.1 は WS-I の BP (Basic Profile) 1.0 をサポートしています。BP 1.0 の後、WS-I の人達は BP 1.1 (そして関連の AP 1.0 と SSBP 1.0) を開発しました。こうした新しいプロファイルは、いくつかのマイナーな点を明確にし、より明確に添付を定義しています。JAX-WS 2.0 は、こうした新しいプロファイルをサポートしています。ほとんどの場合、両者の違いが Java プログラミング・モデルに影響することはありません。例外は添付です。WS-I は添付に関するいくつかの問題を解消しただけではなく、独自の XML 添付型、つまり wsi:swaRef も定義したのです。
多くの人が、こうした様々なプロファイルに混乱しています。この混乱を整理するためには、少しばかり歴史を知る必要があります。
WS-I の最初の basic profile (BP 1.0) は、様々な仕様を明確にするという点で、それなりに適切なものでしたが、完璧ではありませんでした。特に、Sw/A (SOAP with Attachments) のサポートは相変わらず、あいまいなままでした。WS-I の人達は、2 番目のバージョンのための作業の中で、その basic profile (つまり BP 1.1) から添付を削除してしまいました。そして最初のバージョンで見逃されていた、いくつかの問題を修正しました。その時点で彼らは、AP 1.0 とSSBP 1.0 という、相互排他的な 2 つの補足も basic profile に追加したのです。AP 1.0 は Attachment Profile であり、Sw/A の使い方を記述しています。SSBP 1.0 は Simple SOAP Binding Profile であり、Sw/A をサポートしない Web サービス・エンジン (例えば Microsoft の .NET など) を記述します。WS-I が現在持っている、そして WS-I が作業中の、それ以外のプロファイルは、こうした basic profile の上に構築されています。
Java 5
Java 言語には、いくつかの変更が行われています。JAX-WS は、アノテーション、ジェネリックス、そして実行プログラム (executor) に依存しています。こうした新機能に JAX-WS が具体的にどう依存しているのかについては、今後の記事で詳細に説明する予定です。また、こうした Java の新機能については、参考文献にあげた Java 5 のリンクを参照してください。
まとめ
JAX-WS 2.0 は JAX-RPC 1.1 の後継です。両者の間で変わっていないものもいくつかありますが、ほとんどのプログラミング・モデルは多かれ少なかれ異なっています。今回の記事で紹介した項目については、今後何ヶ月かに渡って公開する予定の一連の記事の中で、JAX-WS と JAX-RPC との詳細な比較として解説する予定です。ただし上位のレベルから見ると、JAX-RPC から JAX-WS に移行すべきか否かを決める理由として、下記をあげることができます。
JAX-RPC 1.1 にとどまるべき理由
- 以前から既に使われているものを使い続けたい場合 (JAX-RPC は今後も当分の間サポートされる見込みです)。
- Java 5 にステップ・アップしたくない場合。
- SOAP エンコードされたメッセージを送信したい、あるいは RPC/エンコード・スタイルの WSDL を作成したい場合。
JAX-WS 2.0 にステップ・アップすべき理由
- 新しい、メッセージ指向の API を使いたい場合。
- MTOM を使って添付データを送りたい場合
- JAXB によって、より適切に XML スキーマをサポートしたい場合。
- Web サービス・クライアントに非同期プログラミング・モデルを使いたい場合。
- SOAP 1.2 メッセージを処理できるクライアントまたはサービスが必要な場合。
- Web サービスで SOAP が必要ないようにし、XML/HTTP バインディングのみを使いたい場合。
- 最先端の技術をいじってみたい場合。
参考文献 学ぶために
製品や技術を入手するために
著者について  | |  | Russell Butek氏は、IBMのWebサービス・コンサルタントです。IBM WebSphereのWebサービス・エンジン開発者の一人として活躍してきました。JAX-RPC Java Specification Request (JSR)エキスパート・グループの一員でもあります。Apacheの AXIS SOAPエンジンの実装に関与し、AXIS 1.0がJAX-RPC 1.0に対応するように努力を重ねました。以前はIBM製のCORBA ORBの開発者、そして(ポータブル・インターセプター・タスクフォースの議長を含む)数々のオブジェクト管理グループのIBM代表を務めました。 |
 | |  | Nick Gallardo は、IBM WebSphere プラットフォームのソフトウェア・エンジニアとして、Web サービスの様々な側面に焦点を当てた業務を行っています。最近は JAX-WS のサポートを扱いました。IBM の中で以前携わった業務には、WebSphere と Tivoli プラットフォームに関するものがあります。彼はテキサス州オースチン (Austin) で、2 つの技術ベンチャー企業で開発に従事した後、2001 年に IBM に入社しました。 |
記事の評価
|