Spring Web Services まとめ その1
前から気になってたSpring Web Services(以下 Spring-WS)を試しているので少しづつまとめてみるテスト。
Spring-WSの特徴 (Chapter 1)
Spring-WSはドキュメントドリブンなWebサービス開発を行うためのプロダクト。
contract-firstな開発を行うもので、XML Schema(XSD)ファイルを元にサービスの実装を行っていく(WSDLファイルは自分で作成する or Spring-WSがXSDとSpring Frameworkのコンフィギュレーションを元に公開してくれる)。JavaのオブジェクトからWSDLを生成してWebサービスとして公開する、といった類のものではない。
Spring-WSの内部ではSpring Frameworkを利用しているため、Webサービス実装に対するDIなども可能。
その他のキーワードは以下の通り。
- 強力なマッピング機能
- XML APIのサポート
- 柔軟なXML Marshalling
- Spring Frameworkの知識の再利用
- Spring Web Servicesは全ての設定でSpring FrameworkのApplicationContextを利用しているため、Spring Framework開発経験者にとって理解が容易。また、Spring Web ServicesのアーキテクチャはSpring MVCのアーキテクチャに近い。
- WS-Securityのサポート
- SOAPメッセージの暗号化/復号化や認証を行うことが可能。
- Acegi Securityとの統合
- Spring Web ServicesにおけるWS-Securityの実装は、Acegi Securityとの統合を提供している。つまり、既存のAcegiのコンフィギュレーションをWebサービスでも利用可能である。
- Mavenによるビルド
- Apacheライセンス
なんでcontract-firstなのか (Chapter 2)
上で書いたように、Spring-WSはcontract-firstな開発のみサポート。その理由は以下の通り。
Object/XML間のインピーダンス・ミスマッチ
オブジェクトからXSDを生成すると、以下のような問題が発生する。
- XSDの拡張が利用できない。
- stringに対して制約(restriction)をつけるなど。
- XSDで表現しきれないオブジェクトがある。
- java.util.TreeMapオブジェクトなど、XSDでは表現しきれない(もしくは実装次第で表現の仕方が異なる)オブジェクトが存在する。
- Cyclic graphs
- AがBの参照を持ち、BもAの参照を持つようなオブジェクトからXMLを表現しようとすると、Cyclic graphsな構造となってしまう。
contract-first対contract-last
contract-lastには以下の問題点がある。
- 変更しづらい
- 再利用性
- XSDファイルとしての再利用ができない。contract-firstであれば、XSDやWSDLでさえもimportすることが可能。
- バージョン管理