総まとめ

Download Report

Transcript 総まとめ

Webサービス II (第13回)
http://www.wakhok.ac.jp/~tatsuo/ws2
2007年1月17日
本講義のまとめと補足



新しい技術群
Java SE 6, 各種フレームワーク
IDE
開発の思想
EoD, SOA
背景にある最新の動き
Web 2.0, RESTful なサービス
本講義で扱った技術的な内容

JWSDP 2.0
JAXB, JAX-WS 2.0
新しいツール群
xjc, schemagen
wsgen, wsimport
=> Java SE 6 の中に吸収
JAXB




JAXB(Java architecture for XML Binding)
Java と XML とのマッピングを提供
新しい Webサービスを支える基礎技術
アノテーションをフルに活用
対応のまとめ




Java言語 < -- > W3C XML Schema
Java のクラス < -- > スキーマ定義ファイ
ル
Java のインスタンス < -- > XML文書
Java のフィールド < -- > XMLの要素,属
性
新しい ツール xjc (1)


xjc ( XML to Java compiler )
W3C XML Schema 定義ファイルを
Java のクラス定義に
xjc name.xsd
Javaクラスからスキーマを生成

ツール schemagen
schemagen persen/*.java

サンプルでは
person.Person.java , person.Name.java
付加されたアノテーションの例

「プロパティ」とフィールド
@XmlElement(required = true)
protected String first;
@XmlElement(required = true)
protected String last;
アノテーションの例(属性に変換)

@XmlAttribute アノテーション
public class Point {
@XmlAttribute
public int x;
@XmlAttribute
pulbic int y;
}
生成される XML Schema
<xs:complexType name="point">
<xs:sequence/>
<xs:attribute name="x" type="xs:int"
use="required"/>
<xs:attribute name="y" type="xs:int"
use="required"/>
</xs:complexType>
対応するXML文書の表現
<point>
<x>0</x>
<y>1</y>
</point>
ではなく、
<point x=“0” y=“1” />
JAX-WS




新しい Webサービスの枠組み
じゃ、古い Webサービスって?
JAX-RPC 1.0
JAX-RPC 2.0 = JAX-WS 2.0
JAXB を利用して実現
Webサービスのアノテーションの導入
Webサービスのアノテーション
import javax.jws.*;
@WebService
public class HelloImpl {
public String sayHello( String name ) {
return “Hello,” + name;
}
}
@WebService の意味
「このクラスは Webサービスの処理を実行す
る実装クラスとなります。」
 Webサービスに必要なものはすべてこのク
ラスの情報を元に生成
 どうやって?誰が?
(これからは、そんなこと知らなくてもいい)

本当はこれだけになる
実装クラスを「ごく普通の Java」のプログラ
ムとして書く
( POJO = Plain Old Java Object )
 Webサービスのアノテーションを付ける
(最低限なら @WebService のみ)
 サーバに渡す(以上で終了)
 Webサービスも Java SE の守備範囲!

自動生成(wsgenツール)
javac hello\HelloImpl.java
wsgen -cp . -wsdl hello.HelloImpl
HelloService.wsdl, HelloServiceTypes.xsd
hello.jaxws 以下に sayHello.java,
sayHelloResponse.java
sayHello.class
sayHelloResponse.class
クライアントプログラムの作成(1)


自動生成ツール wsimport
wsimport HelloService.wsdl
wsimport http://localhost/Service?wsdl
HelloImpl.class, HelloServiceImpl.class,
ObjectFactory.class
SayHello.class, SayHelloResponse.class
クライアントプログラムの作成(2)
public class HelloClient {
public static void main ( String[] args ) {
HelloImpl port = new
HelloImplService().getHelloImplPort();
String message
=port.sayHello( "Tatsuo" );
System.out.printf ( message );
JAX-WSの補足




REST(Representational State Transfer)
HTTP で XMLのデータなどを交換するスタ
イルのWebサービス
SOAP(XML-RPC) vs. REST ??
JAX-WS は JAX-RPC の後継だが RESTに
も対応可能 – JAXB がベース
サービス固有のXML Java のクラス
JAX-WS のAPI



javax.jws パッケージ
@WebService, @WebMethod などのア
ノテーション
javax.jws.soap パッケージ
@SOAPBinding などアノテーション
javax.xml.ws パッケージとサブパッケー
ジ群
javax.xml.ws パッケージ


Service クラス
Serviceのインナクラス
enum ServiceMode
ServiceMode.MESSAGE
ServiceMode.PAYLOAD
Provider, Dispatch, Response などのイン
タフェース群
統合開発環境(IDE) NetBeans
開発の最近の思想


EoD( Ease of Development)
Java SE 5, 6 で意識
新しい言語仕様(アノテーションの実現)
SOA (Service Oriented Architecture)
SOAとは?
Service Oriented Architecture
 サービスをコンポーネント化してシステムを
設計する
(cf. Object Oriented Programming )
 個々のサービスの実装よりも「上の層」の
話

現状の開発環境と背景
Java EE +フレームワーク(JSF, Struts)
+ 「古典的な」Webサービス
 対抗する(?)技術の登場
軽量な言語( PHP, Ruby, JavaScript)
+ 新しいフレームワーク
+ RESTful な Webサービス
 開発効率はケースバイケース?

技術間の関連
変貌するJava



EoDの実現、IDEの標準的利用
Script対応 (スクリプトのシステムとの共
存)
オープンソース化とコミュニティの形成
Java SE 6, 7
GlassFish プロジェクト