Web サービスのヒント: JAX-RPC と JAX-WS、第 1 回

導入編

JAX-WS 2.0 は JAX-RPC 1.1 の後継です。この記事は、この 2 つのJava Web サービス・プログラミング・モデルを比較するシリーズの導入編です。

Russell Butek, Web Services Consultant, IBM

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代表を務めました。


developerWorks 貢献著者レベル

Nicholas Gallardo, Staff Software Engineer, IBM

Nick Gallardo は、IBM WebSphere プラットフォームのソフトウェア・エンジニアとして、Web サービスの様々な側面に焦点を当てた業務を行っています。最近は JAX-WS のサポートを扱いました。IBM の中で以前携わった業務には、WebSphere と Tivoli プラットフォームに関するものがあります。彼はテキサス州オースチン (Austin) で、2 つの技術ベンチャー企業で開発に従事した後、2001 年に IBM に入社しました。



2006年 10月 06日

はじめに

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 バインディングのみを使いたい場合。
  • 最先端の技術をいじってみたい場合。

参考文献

学ぶために

製品や技術を入手するために

  • 皆さんの次期開発プロジェクトを、IBM trial software を利用して構築してください。developerWorks から直接ダウンロードすることができます。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=SOA and web services
ArticleID=244764
ArticleTitle=Web サービスのヒント: JAX-RPC と JAX-WS、第 1 回
publish-date=10062006