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

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

JAX-RSでRESTなWebサービスを作ってみる

JAX-RSを使うとRESTFullなWebサービスがさくっと作成できるらしい。ということで試してみました。

概要

Webサービスを公開するまでの手順は以下の通りです。

  1. JAX-RSの実装(Jersey)をダウンロード
  2. Webサービスとするクラスを書いて、アノテーションを付ける。
  3. HTTPサーバーを起動するランチャを書く。
  4. 作成したクラスをコンバイルして実行。

以上。JAX-WSでWebサービスを作るよりもさらに簡単です。

1.JAX-RSの実装(Jersey)をダウンロード

JAX-RSの実装であるJerseyをSunのサイトからダウンロードします。mavenリポジトリも公開されているみたいですが、とりあえずzipになっているものを取得して使用しました。ダウンロードして展開し、lib以下のjarをパスに通せば開発環境の用意は完了です。

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

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

  • javax.ws.rs.Path
    • クラスのアノテーションとして指定します。
    • 引数で、このクラスを割り当てるURIのパスを指定します。
  • javax.ws.rs.GET
    • GETリクエストを処理するクラスのメソッドに設定します。
    • 同様に、「javax.ws.rs.POST」「javax.ws.rs.DELETE」もあります。
package jaxrs.sample;

import javax.ws.rs.GET;
import javax.ws.rs.Path;

/**
 * Webサービスとして公開するクラス。
 */
@Path("/hello") // 「/hello」にアクセスされた場合、このクラスで処理する。
public class HelloService {

    @GET // 「GET」の場合、このメソッドを実行する。
         // 戻り値のStringはそのままレスポンスの本文となる。
    public String hello() {
        return "Hello World!";
    }
}

3.HTTPサーバーを起動するランチャを書く

次に、HTTPサーバーを起動するランチャを書きます。

  • ファクトリが用意されているので、それを呼び出せばOK。
  • 作成した「HelloService」は、サーバー内部で自動探索される(!)らしいので、マッピングの指定などは不要です。
package jaxrs.sample;

import java.io.IOException;

import com.sun.jersey.api.container.httpserver.HttpServerFactory;
import com.sun.net.httpserver.HttpServer;

/**
 * HTTPサーバーを起動してサービスの提供を開始するランチャ
 */
public class Launcher {
    public static void main ( String[] args )
    throws IllegalArgumentException, IOException {

        // サーバーを作成して起動する。
        // Serviceクラスは内部で自動探索される(!)らしいので特に指定は不要。
        // なお、引数で指定するURLでは、末尾の「/」が必須なのでご注意。
        HttpServer server =
            HttpServerFactory.create( "http://localhost:8080/" );
        server.start();

        // ほんとはちゃんと終了処理をしないとダメ。
    }
}

4.作成したクラスをコンバイルして実行。

あとは、「HelloService」「Launcher」をコンパイルして実行すればOK。

http://localhost:8080/hello

にブラウザでアクセスすると、

Hello World!

が表示されるはずです。