(コード自体は 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 件のコメント:
コメントを投稿