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/ImageSearchService/V1/ImageSearchResponse.xsd
サンプル実行までの手順 スキーマから xjc でJavaのソースを生成 生成されたソースのコンパイル(javac)
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.QUALIFIED) 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サービスへアクセスするクライアント コンパイル、実行 帰ってきた情報の処理