RESTfulな Webサービスへのアクセス

Download Report

Transcript RESTfulな Webサービスへのアクセス

Webサービス II(第3回)
2007年10月10日
この時間の目標


JAXBの応用
RESTful なWebサービスへのアクセス
JAXB(再確認)




JAXB(Java architecture for XML Binding)
Java と XML とのマッピングを提供
新しい Webサービスを支える基礎技術
アノテーションをフルに活用
RESTful なWebサービス




REST(Representational State Transfer)
HTTP で XMLのデータなどを交換するスタ
イルのWebサービス
SOAP(XML-RPC) vs. REST ??
JAX-WS は JAX-RPC の後継だが RESTに
も対応可能 – JAXB がベース
サービス固有のXML Java のクラス
javax.xml.ws パッケージ


Service クラス
Serviceのインナクラス
enum ServiceMode
ServiceMode.MESSAGE
ServiceMode.PAYLOAD
Provider, Dispatch, Response などのイ
ンタフェース群
サンプル(Yahoo Image検索)
Yahoo Image Search の API
http://developer.yahoo.com/search/image
/V1/imageSearch.html
 XML Schema も公開
http://search.yahooapis.com/ImageSearc
hService/V1/ImageSearchResponse.xsd

サンプル実行までの手順




スキーマから xjc でJavaのソースを生成
生成されたソースのコンパイル(javac)
クライアントのコンパイル(javac)
実行(java)
xjc と生成されるソース


xjc ImageSearchResponse.xsd
yahoo/srchmi 以下に
ResultSet.java, ResultType.java,
ThumbnailType.java
ObjectFactory.java, package-info.java
package-info.java ??

名前空間の情報のみのソース
package文へのアノテーション
@javax.xml.bind.annotation.XmlSchema(
namespace = "urn:yahoo:srchmi",
elementFormDefault =
javax.xml.bind.annotation.XmlNsForm.QUALI
FIED)
package yahoo.srchmi;
サンプルソース(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);
サンプルソース(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());
サンプルソース(3)
JAXBContext jbc =
JAXBContext.newInstance( "yahoo.srchmi" );
Dispatch<Object> d
= s.createDispatch(portName, jbc,
Service.Mode.PAYLOAD);
Map<String, Object> requestContext =
d.getRequestContext();
requestContext.put(
MessageContext.HTTP_REQUEST_METHOD,
"GET");
サンプルのソース(4)
ResultSet rs = (ResultSet)d.invoke(null);
for (ResultType r: rs.getResult()) {
System.out.println(
r.getTitle() + “ “ + r.getClickUrl() );
}
実行までの手順




Schemaファイルを xjc で処理
(Javaのソースを自動生成)
生成されたソースのコンパイル
Webサービスへアクセスするクライアント
コンパイル、実行
帰ってきた情報の処理