http://www.wakhok.ac.jp/~tatsuo/ws2/ 2006年11月22日 植田龍男 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) ? 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/HelloService/hello
クライアントプログラムの作成(1) 自動生成ツール wsimport wsimport HelloService.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