
第1回 SOAPの先進機能を斬る!
SOAPメッセージ・ハンドラーと拡張可能タイプ・マッピング
|
拡張可能タイプ・マッピング |
JAX-RPCのランタイムは、SOAPメッセージを受信するとメッセージをパースし、SOAPMessageContextを生成して、DOMツリーを構築します(継承インターフェイスであるSOAPElementなどでできたDOMツリー)。しかし、エンドポイントとなるJavaコードは、これらのDOMツリーを操作して動作するわけではなく、エンドポイントが必要なオブジェクトに自動的に変換されることになっています。この処理を行う部分をデシリアライザーといいます。
入ってきたXMLメッセージ(DOM)をJavaオブジェクトに変換するのをデシリアライザー、JavaオブジェクトをXMLメッセージ(DOM)に変換するのをシリアライザーといいます。XMLとJavaの間の変換は「標準マッピング」とか「デフォルト・マッピング」という呼び方で決められており、それを行うためのデシリアライザーは、JAX-RPCランタイムの標準機能として提供されます。しかしながら、場合によってはこの標準の機能を使わずに自作する必要もあります。例えば、以下のようなことです。
- 標準のマッピングと違うメッセージ形式(XML)を扱いたい
- 標準のマッピングでは伝達されない情報を付加したい
- 汎用デシリアライザーではオーバーヘッドが大きいため、シンプルな専用デシリアライザーを使うことで性能を上げたい
そこで、デシリアライザーを自作し、交換できるようになっています。これを拡張可能(Extensible)タイプ・マッピングといいます。
JAX-RPCでは、タイプ・マッピングの管理仕様(フレームワーク)の規定があるのみ(下図を参照)で、デシリアライザーの標準仕様を取り決めていません。つまり、「JAX-RPC標準にのっとったデシリアライザーというのは存在しない」ということです。これが何を意味するかというと、JAX-RPCに対応したサーバーならどのベンダのサーバーでも使えるデシリアライザーというのは作れないということです。こういうことを「ポータビリティー(可搬性)」といいます。現状では、デシリアライザーは、ベンダ依存のモジュールとなってしまうことになり、ポータブルなデシリアライザーは作れません。
![]() |
デシリアライザーの可搬性に関しては、次のバージョンで取り扱うことになっています。
■Apache SOAP、 Apache Axisでのデシリアライザー
では、デシリアライザーのフレームワークを古くから持つApache系のSOAPでのデシリアライザーの作成方法を簡単に紹介しましょう。
Apache SOAPでは、org.apache.soap.util.xml.Serializer(Deserializer)をimplementし、marshall(unmarshall)メソッドを実装する、というのが基本です。実施には、内部で非常に多くのことをやらなければいけないのですが、ユーティリティークラスがそろっていますので、それらを活用します。具体的な方法がdeveloperWorksにありますので参考にしてください(「Apache SOAPの型マッピング)。
Apache Axisでは、org.apache.axis.encoding.Serializer(Deserializer)をimplementし、serialize(onStartChild)を実装する、という方式です。Axisのデシリアライザーの作成方法は、Axis自体に入っているドキュメントに載っていますし、サンプルも提供されています。
このように、Apache SOAPとApache Axisでさえ、まったく違う方法となっています。
いずれも共通なのは、シリアライズのためのメソッド(marshall、serialize)や、デシリアライズのためのメソッド(unmarshall、onStartChild)などは、再帰的に呼ばれるということです。
今回は、SOAPメッセージ・ハンドラーと拡張可能タイプ・マッピングについて触れました。今後はハンドラーをJAX-RPC準拠で作るのが主流となるでしょう。タイプ・マッピングに関しては、当分の間はベンダ依存のシリアライザーを作ることになり、共通に使えるものを作れるようになるにはもう少し待たなければいけないようです。
| 2/2 |
|
米持先進技術塾−@IT分室 |
||
| 第1回 SOAPの先進機能を斬る! | ||
| Page1 SOAPメッセージ・ハンドラー |
||
| Page2 拡張可能タイプ・マッピング |
||
| 筆者プロフィール |
米持幸寿(よねもち ゆきひさ)![]() 1987年に日本アイ・ビー・エム入社。メインフレームOS、ミドルウェアの障害対応、障害解析ソフトウェアの開発、ワークフローシステム開発、オブジェクト指向開発、Web開発などを経験。2000年より、ソフトウェアのテクノロジー・エバンジェリストとして活動中。 米持先進技術工房 テクノロジー・エバンジェリストとして活躍する米持氏が主催する、J2EEの最新技術情報を提供するWebサイト。 http://www-6.ibm.com/jp/developerworks/tips/ytech/ |
米持先進技術工房−@IT分室 バックナンバー
| Java Solution全記事一覧 |
TechTargetジャパン
- Scalaのパッケージ、アクセス修飾子、オブジェクト継承 (2012/5/22)
インポート、パッケージオブジェクト、抽象クラス/抽象メソッド、オーバーライド、final、シールドクラスなども - 基幹系システムでCloud SQLは使えるか試してみた (2012/5/17)
サンプルとしてMRPシステムを作成して動かし、「再帰呼び出し」などのパフォーマンスを測定して検証してみます - アジャイル管理ツール9選+Pivotal Tracker入門 (2012/5/14)
群雄割拠のアジャイルプロジェクト管理ツールを9つ紹介し、特に注目を集めているPivotal Trackerの基本的な使い方を解説します - サーバサイドJSやJavaでWebアプリが作れるXPages (2012/5/11)
Notes/Dominoの資産をサーバサイドJavaScriptやJavaで操作し、HTMLやJavaScript、CSSをUIにできる技術を紹介
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -


