Download presentation
Presentation is loading. Please wait.
Published byさなえ おおかわち Modified 約 7 年前
1
http://www.wakhok.ac.jp/~tatsuo/ws2/ 2006年11月15日 植田龍男
Webサービス II (第8回) 2006年11月15日 植田龍男
2
今週の Java の2大ニュース!! Java のオープンソース化が正式に発表!
Java SE 6 がβ版ではなくなりました! JDK 6 Release Candidate
3
本日の目標(その1) Java SE 6 をインストールしよう Windows版は管理者権限が必要
(自分のノートPCなどを利用してください。) 実習室のマシンの場合 Linux で作業してください。 注意: 250Mbyte ほどの空き容量が必要
4
インストールの手順 Linux 用のインストールプログラム jdk-6-rc-linux-i586.bin をダウンロード
(RPMの形式もあるが、これも管理者権限が必要になる) 適当なディレクトリで実行 sh jdk-6-rc-linux-i586.bin 作業したディレクトリの下に展開される jdk1.6.0/bin を PATH の先頭に追加
5
設定ファイルの例 .profile if [ `uname` = "Linux" ]; then
PATH=~/jdk1.6.0/bin:.:$PATH export PATH fi
6
JAXB を使ってみよう(1) xjc, schemagen ツールの利用 JavaからXMLへ、XMLからJavaへの確認
ビルドファイルは不要 javac と java のみ!
7
JAXBを使ってみよう(2) RESTful な Webサービスへのアクセス これも xjc,javac と java だけでできるはず
8
JAX-WSの補足(前回の復習) REST(Representational State Transfer)
HTTP で XMLのデータなどを交換するスタイルのWebサービス SOAP(XML-RPC) vs. REST ?? JAX-WS は JAX-RPC の後継だが RESTにも対応可能 – JAXB がベース サービス固有のXML Java のクラス
9
javax.xml.ws パッケージ Service クラス Serviceのインナクラス enum ServiceMode
ServiceMode.MESSAGE ServiceMode.PAYLOAD Provider, Dispatch, Response などのインタフェース群
10
JAX-WS for REST の現状 一部の仕様が流動的(?) バグ有り(?) 情報も少ない 参照) Marc Hadley氏のブログ
11
サンプル(Yahoo Image検索) Yahoo Image Search の API
XML Schema も公開
12
サンプル実行までの手順 スキーマから xjc でJavaのソースを生成 (この時、一部手を入れる必要あり? どうなったのだろう?)
生成されたソースのコンパイル(javac) クライアントのコンパイル(javac) 実行(java)
13
xjc と生成されるソース xjc ImageSearchResponse..xsd yahoo/srchmi 以下に
ResultSet.java, ResultType.java, ThumbnailType.java ObjectFactory.java, package-info.java
14
ちょっと修正が必要だったが? ResultSet.java @XmlRootElement(name = “ResultSet”)
public class ResultSet { @XmlRootElement(name = "ResultSet") あれ?名前空間の指定が見当たらない!
15
またまた仕様が変更された? 名前空間の情報は package-info.java に記述されている package-info.java
@javax.xml.bind.annotation.XmlSchema( namespace = "urn:yahoo:srchmi", elementFormDefault = javax.xml.bind.annotation.XmlNsForm. QUALIFIED) package yahoo.srchmi;
16
サンプルソース(1) 前回と同じ URI nsURI = new URI("urn:yahoo:srchmi");
QName serviceName = new QName("yahoo",nsURI.toString()); QName portName = new QName("yahoo_port",nsURI.toString()); Service s = Service.create(serviceName);
17
サンプルソース(2) 前回と同じ URI address = new URI("http", null,
"api.search.yahoo.com", 80, "/NewsSearchService/V1/newsSearch", "appid=jaxws_restful_sample&type=all& results=10&sort=date&query=Japan“ ,null); s.addPort(portName, HTTPBinding.HTTP_BINDING, address.toString());
18
サンプルソース(3) JAXBContext jbc = JAXBContext.newInstance( "yahoo.yn" );
Dispatch<Object> d = s.createDispatch(portName, jbc, Service.Mode.PAYLOAD); Map<String, Object> requestContext = d.getRequestContext(); requestContext.put( MessageContext.HTTP_REQUEST_METHOD, "GET");
19
サンプルのソース(4) 前回は StreamSource ss = (StreamSource)d.invoke(null);
Unmarshaller u = jbc.createUnmarshaller(); ResultSet rs = (ResultSet)u.unmarshal(ss);
20
サンプルのソース(4) 今回は ResultSet rs = (ResultSet)d.invoke(null);
for (ResultType r: rs.getResult()) { System.out.println( r.getTitle() + “ “ + r.getClickUrl() ); } かなり簡略化された仕様に変更
21
ビルドファイルはいりません xjc ImageSearchResponse.xsd javac yahoo/srchmi/*.java
javac YahooImageTest.java java YahooImageTest
22
通常のWebサービスも簡単に ただし、サーバとの互換性が・・・ サーバの側も新しい仕様にしましょう
Linux 用の最新の GlassFish で試す? (これは次回に)
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.