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 プロジェクト