JAX-WSでWebサービスを作ってみる
ITPro -「Java SE 6完全攻略」第81回 JAX-WS その1より。Java 6 から標準添付になったJAX-WSを使うと任意のJavaクラスをさくっとWebサービスにして公開できるらしい。ということで試してみました。
概要
公開までの手順は以下の通り。
1.Webサービスクラスを書いて、アノテーションを付ける
Webサービスとして公開するJavaのクラスを書き、専用のアノテーションを設定します。
- クラスは任意のPOJOでOK。
- クラスのアノテーションとして、「javax.jws.WebService」を、
- (必須ではないとのことですが)公開するメソッドに「javax.jws.WebMethod」を設定します。
package jaxws.sample; import javax.jws.WebMethod; import javax.jws.WebService; /** * Webサービスとして公開するクラス。 * 任意のPOJOをアノテーションで修飾すればOK */ @WebService public class HelloService { @WebMethod public String hello() { return "Hello World!"; } }
3.コンパイルしたクラスを指定して、wsgenを実行
コンパイルしたクラスを引数で指定して、JDK付属の「wsgen」を実行します。クラスパスにも2で作成したクラスを通しておく必要があるのでお忘れなく。
$ wsgen -cp . jaxws.sample.HelloService
実行後、「./jaxws/sample/jaxws」以下に、「Hello.class」と「HelloResponse.class」が作成されます。
4.HTTPサーバーを起動するランチャを書いて、サーバーを起動する。
あとはHTTPサーバーを起動するランチャを書いて、サーバーを起動すればOK。
package jaxws.sample; import javax.xml.ws.Endpoint; /** * HTTPサーバーを起動してサービスの提供を開始するランチャー */ public class Launcher { public static void main ( String[] args ) { Endpoint.publish( "http://localhost:8080/hello", new HelloService() ); } }
Endpointは「javax.xml.ws」パッケージのものなのでご注意。これをコンパイルして実行すれば、「http://localhost:8080/hello」でWebサービスが公開されます。wsdlも「http://localhost:8080/hello?wsdl」で参照可。
クライアントから接続してみる。
なんとなくrubyで。普通にアクセスできます。
require 'soap/wsdlDriver' wsdl = "http://localhost:8080/hello?wsdl" driver = SOAP::WSDLDriverFactory.new(wsdl).create_rpc_driver puts driver.hello({}).return
実行結果です。
Hello World!