ファイヤープロジェクト
サーバ側でWADLを使用してみる
2008-11-29T00:20+09:00   matsu
WADL拡張機能を使用すると,リソースクラスとWADLファイルを作成するだけでサーバ側restletを構築できる
WADLはWeb Application Description Languageの略らしい. SOAPならWSDLのところを,RESTならWADLということだろうか. WSDLはかなり複雑なものとなっているようだが,WADLはRESTと同様,シンプルな仕様となっており,扱いやすい. この辺が仕様のようだ.
Restletの配布物には,
org.restlet.ext.wadl_1.0.jar
が含まれており,これをクラスパスに加えると,org.restlet.ext.wadlパッケージのWadl拡張を使用できる. より具体的には,Resourceクラスを作成し,Wadlファイルにてサーバ構成を設定すれば,いきなりrestletとなる. 最初のサンプルとして作成したHelloResourceとParamResourceで構成してみる.
あとは,
org.restlet.ext.wadl.WadlComponent
に上記WadlファイルのURLを指定すれば(※),サーバ側restletとして起動する. ソースを見た感じ,Wadlファイルは複数指定できそう.
for (final String arg : args) {
  component.attach(arg);
}
※ URLを記述すること. org.restlet.Componentの場合は,ローカルの設定ファイルのみを想定していたので,単純なファイルパスでよかったが,WadlComponentの場合は,ローカルファイルでも"file:///...../hello.wadl"としなければならない.
WADLの厳密な仕様を知りたい場合は,http://research.sun.com/wadl/2006/10を辿ってXSD参照. もっとおおらかに観て行くなら,
applicationが一つ
  resourcesが一つ
    resourceが複数
      各resourceにmethodが一つ
となっている. 他にも要求回答の定義などもあるが,それは別途. 注意点としては,resources要素の属性baseがベースのURLとなり,resouce要素の属性pathはそのベースURLからの相対パスであること. バグなのか仕様なのかよく分からないが,resources要素の属性baseの値は"/"で終るとどのresource要素にもマッチしなくなるので注意. ベースURLやパスの末尾には"/"はいれず,パスの先頭には"/"をつけるというのがよさそうな雰囲気. そして,リクエストのURLがresource要素のパスとマッチした場合,resource要素のid属性に設定したResourceクラスのFQCNが生成され動く. このid属性の設定値に関する仕様はWADLのものではなく,Restlet特有らしい. また,WadlComponentのJavaDocによれば,resouces要素に応じてバーチャルホストを生成して,マルチスレッドで動かすから,WadlComponentクラスやそのサブクラスはスレッドセーフにしておきなさいとのこと.
matsu(C)
Since 2002
Mail to matsu