人気ブログランキング | 話題のタグを見る
2006年 04月 06日
Axis2 での REST による Webサービス
Axis2 では REST での Webサービスをサポートしています。

ドキュメントによると、Axis2 の REST 実装は以下のようになっています。
・同期型のリクエスト/レスポンス
・GETでアクセスされた場合、サービス名と操作はURLにより識別され、
GETのパラメータがそのままWebサービスのパラメータになる。
引数としては単純型のみサポートされる。
・POSTでのアクセスの場合、SOAP EnvelopeやSOAP Bodyは不要。
パラメータを直接送ればよい。
また、RESTを使うにあたって、axis2.xmlのコメントアウトされているREST
の設定を有効にしておく必要があるとのこと。

3月10日に作成したテストのサービスを使って、確認してみました。
注意として、import org.apache.axis2.om.*; は Axis2 0.95 では
import org.apache.ws.commons.om.*; に変更する必要があります。

●GETでのテスト

テストと言っても、WEBブラウザからURLを指定するだけです。
サービス名と操作がURLで識別され、パラメータがそのままWEBサービス引数になるので、
http://localhost:8080/axis2/services/サービス名/操作?パラメータ名1=値1&...
のようなイメージとなります。

実際に以下のURLを実行してみます。

http://localhost:8080/axis2/services/ComplexTest/sayHello?inParam=This_is_REST_test_by_GET

すると下の実行例のように結果が取得できるのが分かります。
Axis2 での REST による Webサービス_f0091228_239537.gif

SOAPのエンベロープもヘッダもボディタグもなく、結果のXMLのみが返ってきています。

●POSTでのテスト

これは簡単なHTMLを書いてやってみたのですが、SOAP Faultが発生してできませんでした。

<html>
<head></head>
<body>
<form method="POST" action="http://localhost:8080/axis2/services/ComplexTest/sayHello">
<input type="text" name="inParam" value="">
<input type="submit" value="POST REST WEB service">
</form>
</body>
</html>

POSTの所をGETにすれば動くのですが。。。
そこで、今流行の xmlhttprequest を使って以下のようにしてみたところ、

<html>
<head>
<script>
function post_form() {
var xmlhttprequest = new ActiveXObject("Microsoft.XMLHTTP");
var dom = new ActiveXObject("Microsoft.XMLDOM");
// create request XML
var req = dom.createElement("sayHelloRequest");
var inparam = dom.createElement("inParam");
inparam.text = "post-test";
dom.appendChild(req);
dom.documentElement.appendChild(inparam);
// send request
xmlhttprequest.Open("POST", "http://localhost:8080/axis2/services/ComplexTest/sayHello", "false");
xmlhttprequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttprequest.send(dom);
// display response
alert(xmlhttprequest.responseXML.text);
}
</script>
</head>
<body>
<form>
<input type="button" value="POST by xmlhttprequest" onClick="post_form();">
</form>
</body>
</html>

動きました。これは結局XMLを送ってやらないといけないからでしょう。

ドキュメントにあるような、JavaでPOSTクライアントを作成することはやってみてません。

●RESTの有用性

Axis2でRESTもサポートしているという話を見聞きしていて、あまり必要ではないな
と考えていたのですが、これくらい簡単に使えるのなら作成したサービスのとりあえずの
動作チェックに使えるという意味では便利だなと見直しました。
by est2006 | 2006-04-06 23:24 | Axis2


<< Axis2 1.0 RC1 Apache Axis2/C ... >>