読者です 読者をやめる 読者になる 読者になる

Spring Web Services-1.0リリース

dev Spring

JSUGでのmatsukazさんの発表
http://d.hatena.ne.jp/matsukaz/20070727#1185558206
を聞いて、ちょっと気になっていたSpring Web Servicesがリリースされたので試してみた。

Spring Web ServicesのWebサイト

http://static.springframework.org/spring-ws/site/

インストール

http://static.springframework.org/spring-ws/site/downloads/releases.html
から"full"バージョンをダウンロードすればOK。

サンプル「echo」のビルド

J2SE1.4/1.5 および Maven2が必要。
あとは、samples/echoディレクトリで

> mvn jetty:run

とすれば、ビルド後にjettyが起動してサービスが実行可能な状態になる。

> mvn package

とすれば、targetディレクトリにwarが生成される。

サンプル「echo」の実行

このサンプルはWSDLを動的に生成するタイプなので、エンドポイントは src/main/webapp/WEB-INF/spring-ws-servlet.xml

要素の中で定義されている。
今回は、http://localhost:8080/echo/services となる。
なお、WSDLの取得URLは http://localhost:8080/echo/services?WSDL ではなく、http://localhost:8080/echo/echo.wsdl となるので注意。(定義ファイルのに記述されていた。。。ちょっとハマりました。)
あとはSoapUIなどお好きなSOAPクライアントで実行してみてください。

感想

XSDでドキュメント型定義のみ行っておき、そこからWSDLを自動生成するというアプローチは非常に良い落としどころだと思う。
Java->WSDLだとSOAP処理系の実装依存で非互換が発生しやすいし、かと言ってWSDL->JavaではWSDLを作成するのに手間がかかりすぎる。
実は、Java->WSDLで発生する問題の大半はComplex TypeからXMLへのマッピングに起因するものがほとんどで、それ以外の部分、すなわちJavaのmethodをWSDLのoperationにマップする作業はほぼ機械的に行うことが可能だ。従って、「データ型定義はXSD、それ以外はJava」というアプローチは、必要最小限の労力でSOAPサービスの互換性を確保するという面で非常に合理的である。