Groovy で Webサービス公開
Groovy1.1 を使えば、アノテーションが使用できるので Groovy スクリプトで WebServices のクラスを定義する事が可能。
ただし、wsgen コマンドを使う場合は、groovyc コマンドで Java クラスを作成する必要があるなど、Groovy で実行するメリットはあまり無いため、そのうち Groovy だけで WebServices を公開する方法を探ってみたいと思う。
とりあえず今回は、JavaSE 6 を同様の手順で実施してみた。
- WebService アノテーションを使って WebServices 公開用のクラスを定義
- wsgen コマンドを使って関連クラスを自動生成
- Endpoint クラスを使って WebServices を公開
WebService アノテーションを使って WebServices 公開用のクラスを定義
@WebService アノテーションをクラスに付与して、groovyc コマンドで Java のクラスを生成する。
ただし、Groovy で定義したクラスの場合、Groovy 用の public メソッドが groovyc の実行時に追加されるため、@WebMethod アノテーションで明示的にメソッドを指定しておく必要がある。
testMessage.groovy
import javax.jws.WebService import javax.jws.WebMethod @WebService(targetNamespace = "http://test") class TestMessage { @WebMethod def String hello(String msg) { return "${msg}:${this}" } }
Java クラスの生成
>groovyc testMessage.groovy
wsgen コマンドを使って関連クラスを自動生成
先に生成した Java クラスファイルを指定して wsgen コマンドを実行する。
ただし、groovyc で生成したクラスは、Groovy 用のインターフェースを実装しているため、wsgen 実行時のクラスパスに groovy の jar ファイルを指定する必要がある。
wsgen 実行例
>wsgen -cp.;%GROOVY_HOME%\lib\groovy-1.1-beta-2.jar TestMessage
Endpoint クラスを使って WebServices を公開
testServer.groovy
import javax.xml.ws.Endpoint Endpoint.publish("http://localhost:8080/test", new TestMessage())
実行例
>groovy testServer.groovy
備考
クライアントは wsimport を使って Java のクラスを生成し、Groovy スクリプトから呼び出すだけ。
testClient.groovy
import test.* tm = new TestMessageService().testMessagePort println tm.hello("てすと")