2010年8月8日日曜日

[Java][JAX-WS] Webサービス on Eclipse + GlassFish

Eclipse (Helios) で JAX-WS を使った Webサービスを作り、GlassFish 3.0.1にデプロイするまでの手順。
(コード自体は POJO にアノテーションをつけるだけなのだけれど、wsgenの使い方などで若干はまったのでメモ。)

JAX-WS については 「Java SE 6完全攻略」第81回 JAX-WS その1 (と、その続き記事)に丁寧な解説があります。

①Eclipseにプロジェクトを作成
Eclipseで新規 Dynamic Web Project(プロジェクト名 sample-ws)を作る。

②Webサービスクラスを作成
Webサービスで公開するメソッドをもつクラスをPOJOで作り、JAX-WSアノテーションを追加する。
例)sample_ws.Hello クラス

package sample_ws;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

@WebService
public class Hello {

@WebMethod
public String sayHello(@WebParam(name="name") String name) {
return "Hello " + name + "!";
}

}



EclipseのProjectビューで見ると以下の状態。



③wsgenコマンド実行
Remote Systems ビューと Remote Shell ビューを組み合わせればエクスプローラもコマンドプロンプトも立ち上げる必要なし、しらなんだ><。

Projectビューで sample-ws プロジェクトにフォーカスした状態で右クリックメニュー→[Show in Remote Systems view]をクリックすると該当フォルダを開いた状態で Remote Systems ビューが立ち上がる。



さらに Remote Systemsビューで右クリックメニュー→[Launch Shell]とすると Remote Shell ビューでコマンドプロンプトが上がる。



(2010.08.12 追記)
こんなことしなくても、便利なプラグインがあるじゃない・・・。
Eclipse Platform Extensions

プロジェクトのルートフォルダにいる状態で、以下のコマンドを打ち込む。実際開発するときはantか何かで自動化するだろうけど、最初なので手打ち。

%GLASSFISH_HOME%\bin\wsgen -s src -d build\classes -cp build\classes sample_ws.Hello


注1)Projectビューで右クリックメニュー→[New]→[Other]→[Web Services]→[Web Service]で Helloクラスを指定すればGUIから作成できるけれど、web service runtime が Apache axis (GlassFish のWebサービススタックは Metro) しか選択できない。念のため、 GlassFish 付属の wsgen を使うことにした。

注2)JDK 6 は JAX-WS を含むので wsgen もついてるけれど、GlassFish 3.0.1 に含まれる JAX-WS よりもバージョンがちょっと古い様子。(JAX-WSってJ2SEの範囲なのかなぁ、ちょっと違和感)

> wsgen -version
JAX-WS RI 2.1.6 in JDK 6
> %GLASSFISH_HOME%\bin\wsgen -version
JAX-WS RI 2.2.1-hudson-28-


wsgen の -s オプションで生成されるソースの場所、-d で生成されるクラスファイルやWSDLの場所を指定する。Eclipseプロジェクトのフォルダ構成に合わせて指定すると、整合性がとれて気持ちよいかも(とらなくても別に問題はない)。

wsgen 実行後のプロジェクトツリーは以下。



④GlassFishにデプロイ
あとはServersビューから、sample-ws プロジェクトをGlassFishに追加すればOK.
GlassFishをverboseモードにしておいてDebug起動すると、WebサービスのエンドポイントURLが
Hello listening at address at http://localhost:8080/sample-ws/HelloService|#]
という感じでコンソールに出力される。
ブラウザからアクセスするとWebサービスの情報が見える。

0 件のコメント:

コメントを投稿