読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

JAX-WSでWebサービスを作ってみる

Java

ITPro -「Java SE 6完全攻略」第81回 JAX-WS その1より。Java 6 から標準添付になったJAX-WSを使うと任意のJavaクラスをさくっとWebサービスにして公開できるらしい。ということで試してみました。

概要

公開までの手順は以下の通り。

  1. Webサービスとするクラスを書いて、アノテーションを付ける。
  2. 作成したクラスをコンバイル
  3. コンパイルしたクラスを指定して、wsgenを実行。
  4. HTTPサーバーを起動するランチャを書いて、サーバーを起動する。

1.Webサービスクラスを書いて、アノテーションを付ける

Webサービスとして公開するJavaのクラスを書き、専用のアノテーションを設定します。

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!";
    }
}

2.作成したクラスをコンバイル

1で作成したクラスをコンパイルします。

$ javac jaxws/sample/HelloService

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!