2007年4月30日月曜日

Axis, XML RPC, JAX-RPC などなど

もやもやっとしてた Axis を少し勉強。

最近の更新履歴を見る限りあまり活発な状態には見えない。

バイナリディストリビューションを展開すると webapps の下に axis という
ディレクトリがあって webapp の形をしている。これをディレクトリごと
サーブレットコンテナの webappsにコピーする。設定ファイルを更新
したりする必要があるので WAR にまとめてはいけない。

何が出来るかというとコンテナに配置した Axis サーバにユーザが
作ったサービスを登録して呼び出すことが出来る。

形式には AdminService を使って wsdd ファイルを与えて一連の
クラスを登録する方法と java program のソースを .jws 拡張子で
webapps/axis に置き、サーバにコンパイル、配備させる方法の
二つがある。後者はパッケージや、複雑な指定が出来ないため、
凝ったことは出来ない。

WSDL というサービスを記述した情報がクライアントアクセスに必要に
なるが、これは手で書くわけではなく、.wsdd を元に動的に生成されて
いるらしい。サービスの URL に?wsdl をつけてブラウザでアクセス
すると表示される。

Axis/SOAP の位置づけを考えれば当然なことなのだが、扱える
データ型に色々と制約がある。XML でマーシャリングするという
ことは、XML スキーマで記述できるデータでなければならない
ということであり、標準定義されているのはプリミティブ型、文字列、
日付程度である。wsdd に型に関する情報を記述すれば比較的
シンプルな JavaBeansは扱えるが、込み入ったオブジェクト群を
送るのは面倒なことに思える。コレクションも送れない。RMI では
ないのだ。wsdd を熟知するかその記述を自動化する方法が
ないうちはプリミティブデータの配列程度に収めておくのが無難
そうだ。文字列でやり取りをして必要に応じてそれをパースする
ほうがシンプルでよいのかも。でもそう考えるとせっかくデータ
記述性に優れた XML を使ってる意味がよくわからなくなる。
Bean の配列程度でもある程度の表現は出来ないことはない。
逆に考えると Java オブジェクトを渡すということは双方で同じクラス
定義を使用しないといけないことになる。ざっと見た感じでは
RMI では可能なクラスの共有方法などがない。

少しがっかりしたが、関連技術を調べてみるとそうでもないらしい。
ここでは XML RPC の詳細を述べていないが、まずサンプル
として最初に動かす物や JWS は privider="java:RPC"
(or style="RPC")になっている。プロバイダが java:RPC で
あれば Axis ランタイムがシリアライズ、デシリアライズを行う。
その際に XML Schema での記述力、標準で用意された
データタイプに縛られるということである。

スタイルには java RPC のほかに Document, Wrapped, Message
がある。斜め読みだが、Document スタイルを使うとユーザーが
データのシリアライズ。デシリアライズを記述できるように書いて
あるページもある。Axis のドキュメントを見る限りは XML として
サーバー側でデータを受けるときにつかうスタイルは Message
スタイルなので Document ではないのではないかと思ったりもしたが、
Message スタイルで定義できるメソッドのシグネチャに次の
物があり、"Document で..." という記述はこのシグネチャの中の
(DOMだっけ?) のXML 記述型としての Document のことを
言っていたのだと思う。

public Document method(Document body);

スタイルとしての Document, Wrapped は今ひとつ有用性がわからない。

関連する規格に関しても確認してみた。まだ、大雑把で、バージョン
ごとの違いもとてもあいまいなのだが...

JAX-RPC
XML RPC の規格。Java 1.4 でも動作するが機能は少なそう。

JAX-WS
JAX-RPC の後継のようだが Java 1.5 の機能に依存している。

JAXB
Java と XML データのバインディングの規格。

Java オブジェクトのやり取りという点では Axis に Message スタイルの
サービスを用意して JAXB でデータのシリアライズ、デシリアライズを
するようにすると RMI に近い感覚で使えそう。

調べてみると面倒そうなところが見えてきて少し億劫になってしまいそうだ。
----
今日のレッスンは少し少なめ。スタイルもオーソドックスに逆戻り。
でも、それがいいかも。
今期はこんなところで次に期待。方向転換をいれてくれると面白いけど。