Webサービス II (第1回)
Download
Report
Transcript Webサービス II (第1回)
WebサービスII (第10回)
2007年11月28日
植田龍男
本日の目的
RESTful なwebサービスの提供(続き)
参照実装の提供 – Jerseyプロジェクト
Webサービスの統合と規格化
WADL(Web Application Definition
Language)
Jersey でのアノテーション処理( apt )
前回までやったこと
RESTfulなWebサービスとは?
それへのアクセス(JAXB)
Webサービスの開発
Jerseyプロジェクトとは?
HelloWorldの実現
UriTemplate – RESTful の拡張
前回から取り組んでいること
RESTful な Webサービスのサーバ側
JAX-WS の枠組みの中に構築
POJO + アノテーションのスタイル
サービスのサンプル
@UriTemplate("/helloworld")
public class HelloWorldResource {
@HttpMethod("GET")
@ProduceMime("text/plain")
public String getClichedMessage() {
return "Hello World!";
}
}
サービスのコンパイル
ライブラリ jsr311-api.jar をクラスパスに指定
javac -cp ~/jersey-0.4-ea/lib/jsr311-api.jar
HelloWorldResouce.java
今回追加したいこと
WADLファイルの自動生成
WADLの情報を提供するサービス
Jersey の枠組みでは、POJOに付加され
たアノテーションから自動生成
アノテーションの処理の仕組み
アノテーションを解釈する専用のクラス
「プロセッサ」
プロセッサを呼び出すもの
javac コマンド( Java SE 6 )
apt コマンド ( J2SE 5.0 )
Jersey 0.4 は J2SE 5.0 + apt で実装
apt とは何か?
Annotation Processing Tool
J2SE 5.0 から追加されたコマンド apt
(javac, javadoc に関連あり)
メタデータを解釈・処理するプロセッサを
呼び出す
ソースファイルとメタデータを解析
ソース、関連ファイルの自動生成等
apt を使うために用意するもの
メタデータを含むソースファイル(処理対象)
Annotation Processor のクラス
(メタデータを解釈し、処理する)
Annotation Processor Factory のクラス
(Processorを提供する)
com.sun.mirror の4つのパッケージ
( $JAVA_HOME/lib/tools.jar の中)
サンプル1:
Processor の仕組みを知る
1.
2.
3.
4.
サンプルの目的
AnnotationProcessor の実装
AnnotationPorcessorFactory の実装
aptによる実行の手順
AnnotationProcesor が利用するクラス(イン
タフェース)の意味と利用方法
サンプル1:
ProcessorAnnotation の実装
com.sun.mirror.apt.AnnotationProcessor
インタフェースを実装する
public void process() { }
処理内容を記述
コンストラクタの定義
AnnotationProcessor は単独では利用で
きない(AnnotationProcessorFactoryが必
要)
サンプル1:
FirstProcessorの処理
public void process() {
//ソース内にあるAnnotationの一覧
for( AnnotationTypeDeclaration atd : atds )
System.out.println( atd );
//解析対象のクラス
for( TypeDeclaration td :
env.getSpecifiedTypeDeclarations() )
System.out.println( td );
}
サンプル1:
実行までの手順
apt に ProcessorFactory のクラスを指定
-factory または –factorypath
例) apt –factory FirstProcessorFactory
InfoAnnotated.java
注)現行では $JAVAHOME/lib/tools.jar
をクラスパスに指定する必要あり
set CLASSPATH=C:\j2sdk1.5.0\lib
\tools.jar;.
apt + プロセッサでできること
ソースファイルの解析
アノテーションの情報の解釈
データファイルの自動生成
ソースファイルの自動生成
ソースのコンパイル( javac に処理を渡す)
Java SE 6以降の流れ
新しく、より使いやすいAPI (JSR 251)
Factoryのクラスは不要
apt なしで javac 単独で処理が可能
http://www.wakhok.ac.jp/~tatsuo/summer2006/
Jersey の自動処理
HelloWorldService を記述するWADLが
自動生成
com/sun/ws/rest/wadl/resource
の下に application.wadl
同じディレクトリに
WadlResouce のソースとバイトコード生成
=>application.wadlの情報を提供する
サービスを確認するには?
Webサーバと 「コンテナ」が必要
今回は Jerseyと共に配布されている
軽量Webサーバにプログラムを直接組み
込む
サーバのプログラム(1)
public class Main4 {
public static void main(String[] args) {
HttpHandler handler =
ContainerFactory.createContainer(
HttpHandler.class,
hello.HelloWorldResource.class
com.sun…resource.WadlResouce.class);
サーバのプログラム(2)
HttpServer server = HttpServer.create(
new InetSocketAddress(9998), 0);
server.createContext("/", handler);
server.setExecutor(null); server.start();
:
サーバのコンパイルと実行
ant もしくはシェルスクリプトで構築
#!/bin/bash LIB=~/jersey-0.4-ea/lib
javac -classpath.:$LIB/activation.jar:
$LIB/ant.jar:$LIB/comresrcgen.jar:
$LIB/grizzly-1.0.13.jar:$LIB/http.jar:
$LIB/jaxb-api.jar:$LIB/jaxb-impl.jar ….
確認
ブラウザからアクセス
http://localhost:9998/helloworld
http://localhost:9998/application.wadl
まとめ:開発の手順の比較(1)
Java SE 6 の SOAP型の開発
@Webservice アノテーションが付加され
た POJO からスタート
Jersey の RESTful 型の開発
@UriTemplate, @HttpMethod が付加さ
れた POJO からスタート
まとめ:開発手順の比較(2)
SOAP型
ツール wsgen によるソースとWSDLの自
動生成 => サーバが公開
http://sitename/servicename?wsdl
RESTful型
apt + 専用のプロセッサによるソースと
WADLの自動生成=>RESTfulサービスで
公開
http://sitename/applicaiton.wadl