Java SE 6 と JAX-WS

Download Report

Transcript Java SE 6 と JAX-WS

Webサービス II (第9回)
http://www.wakhok.ac.jp/~tatsuo/ws2/
2006年11月22日
植田龍男
この時間の目標



Java SE 6 の環境で Webサービスを構築
サーバの再インストール
ついでに NetBeans も
なぜ、サーバの入れ直し?(1)




Java SE 6 からバイトコードの仕様が拡張
Java SE 6 のバイトコードを Java SE 5 ベース
のサーバは解釈できない(エラー発生)
回避策:コンパイル時にオプション
javac -target 5 hoo.java
ただし、問題はこれだけではなかった
なぜ、サーバの入れ直し?(2)



JAXB のバージョンによって仕様が異なる
旧(javax.xml.bind.annotation.AccessType)
JWSDP 2.0
Sun Application Server 8.2
新(javax.xml.bind.annotation.XmlAccessType)
Java SE 6
ある時期以降の Sun Application Server 9.x
= GlassFish
作業手順



管理者権限のユーザでログオン
必要なインストーラの入手
( y:\ws2 から可能)
java-tools-bundle-windows.exe (Windows)
java-tools-bundle-linux.sh (Linux)
Java SE 6 のインストールが前提
インストール手順(1)
インストール手順(2)
使用する Java は jdk1.6.0 を選択
インストール手順(3)
インストール手順(4)
J2EEの開発パッケージも追加する
インストール手順(5)
今度はアプリケーションサーバ
インストール手順(6)
サーバの起動

ブラウザの管理画面で確認
Webサービスの構築開始
import javax.jws.*;
@WebService
public class Hello {
public String sayHello( String name ) {
return “Hello,” + name;
}
}
本当にこれだけになる
実装クラスを「ごく普通の Java」のプログラ
ムとして書く
( POJO = Plain Old Java Object )
 Webサービスのアノテーションを付ける
(最低限なら @WebService のみ)
 サーバに渡す(以上で終了)
 Webサービスも Java SE の守備範囲!

開発手法の「昔への回帰」?





Webサービスの出発点は
Java or XML(WSDL, XML Schema) ?
XMLから – 厳密、しかし煩雑?
Javaから – 手軽、しかし大丈夫?
JWSDP 2.0( Java SE 6 ) は EoDの観点
から POJO に回帰 – 手軽でしかも厳密
「難しいフレームワーク」 => Java SE
webサービスまで手作業で



Webサービスに必要なものの自動生成
通信でやり取りされるクラス定義
WSDL(Web Service Definition Langage)
のファイル
(上記の通信用のクラスの schema定義を内部
に含む)
設定ファイルの準備(サーバに知らせる情報)
Warアーカイブ化してデプロイ
自動生成(wsgenツール)
javac hello\Hello.java
wsgen -cp . hello.Hello
HelloService.wsdl, HelloServiceTypes.xsd
hello.jaxws 以下に sayHello.java,
sayHelloResponse.java
sayHello.class
sayHelloResponse.class
設定ファイル


web.xml
サーブレットの実装クラス名
セッションの管理など
sun-jaxws.xml
サービスの実装クラス名
エンドポイントのパターン
War アーカイブの生成
WEB-INF – 設定ファイル
WEB-INF – classes – クラス群
 jar cvf HelloService.war WEB-INF
 デプロイ
サーバの決められた場所にコピー
AppServer/domains/domain1/autodeploy

Webサービスの確認
管理画面
http://localhost:4848/
から
 ブラウザで見る
http://localhost:8080/Hello
Service/hello

クライアントプログラムの作成(1)


自動生成ツール wsimport
wsimport HelloService.wsdl
wsimport http://localhost/Service?wsdl
Hello.class, HelloService.class,
ObjectFactory.class
SayHello.class, SayHelloResponse.class
クライアントプログラムの作成(2)
public class HelloClient {
public static void main ( String[] args ) {
Hello port = new
HelloService().getHelloPort();
String message
=port.sayHello( "Tatsuo" );
System.out.printf ( message );
作成したプログラムの実行


javac でコンパイル
javac hello\HelloClient.java
java で実行
java hello.HelloClient