payment-service-se、payment-service-bc、payment-service-batch と、webinarで作成する三つのプロジェクトのうち、まず最初の payment-service-se を少し詳しく見てみる。流れは README.txtに書いてある手順に従う。
■プロジェクトを生成した直後の状態
M2 のアーキタイプ servicemix-osgi-cxf-wsdl-first-archetype が、Maven 2 の規約に従ったディレクトリ構成で、以下のようなファイルを自動生成している。
- src/main/resources/META-INF/spring/beans.xml
後で内容をリプレスする - src/main/resources/wsdl/person.wsdl
別のwsdlを使うので削除する - pom.xml
maven の設定ファイル。後で編集する。
■paymentService.wsdl のインポート
WSDL定義の内容は、以下のようなもの
- サービス PaymentServiceはポートsoap を持つ
- ポート soap のポートタイプ は Paymentである。
- ポートタイプ Payment は、操作 transferFundsを持つ。
- 操作 transferFunds の入力はメッセージ TransferRequest であり、出力はメッセージTransferResponseである。
- メッセージTransferRequest は XSD型 transferに、メッセージTransferResponseは、XSD型 responseに関連付けられている。
■pom.xmlの編集
- プロジェクト名は OSGIバンドルの名前としても用いられ、ServiceMix 上でもこの名前で表示される
- Dependencies で設定するモジュールは、Payment サービスの実装クラス PaymentImpl で使うもの
- cxf-codegen-plugin は wsdl からコードを生成するために用いる。wsdlファイル名とソース生成先を変更。
- maven-bundle-plugin は OSGI バンドルを作るmaven プラグイン。詳細はここ
■maven install
maven install を実行してソースを自動生成する。webinar では「install」だが「cxf-codegen:wsdl2java」ゴールでも可。以下のように pom.xml で指定したフォルダtarget/generated/main/java下に、ソースファイルが生成される。
- com.example.fuse.payment_service
Payment…paymentService.wsdl に書かれた wsdl:portType 定義に対応するインターフェイス
PaymentService…クライアントスタブ - com.example.fuse.payment_service.types
Transfer…paymentService.wsdl 中のtransfer型 に対応するJavaクラス
Response…paymentService.wsdl 中のresponse型 に対応するJavaクラス
ObjectFactory・・・Transfer とResponseのファクトリクラス
package-info・・・パッケージとXML名前空間を対応付ける
■Paymentインターフェイスの実装
PaymentImplクラス で Payment インターフェイスと InitializingBean を実装する。
- transferFunds()メソッドで、入力メッセージをログ出力し「OK」を出力メッセージに設定する
- SpringのInitializingBeanでもあるので、afterPropertiesSet()に確認のためのログ出力コードを書いておく
- setContext()メソッドは Spring からインジェクタメソッドとして呼ばれる
■spring のbean.xml の編集
- エンドポイントでの実際の処理を行うクラスとして PaymentImpl クラスを指定する。
- EndpointExporter に PaymentImpl を登録させる
- 他の編集箇所は、上記1,2のためのリソースや名前空間の準備。
プロジェクトpayment-service-seは、以上のような感じ。
0 件のコメント:
コメントを投稿