JBoss Fuseを使ってみる その3:Webサービス編
はじめに
連載5回目の今回は、JBoss FuseにおいてWebサービスを利用する手順について解説します。
Webサービス編では、以下の内容を理解します。
- JBoss FuseにおけるWebサービスの構成
- CamelルートをWebサービス化する
- WebサービスをCamelルートから呼び出す
- その他
作成するものの構成は図1のようになります。
作成したものはJBoss Fuseにデプロイしますので、必ず事前にJBoss Fuseを起動しておいてください。
$ cd <Fuseのインストールディレクトリ>/bin $ ./fuse
1.JBoss FuseにおけるWebサービスの構成
JBoss FuseのWebサービスは、Apache CXFを用いて実現されています。また、Apache CamelにはCXF用のコンポーネントが用意されており、Camel ルートをWebサービス化したり、Camel ルートからWebサービスを呼び出したりできます(図2)。
図2にもあるように、JBoss FuseではHTTPを利用したSOAPの他、JMSを利用したSOAPやRESTなども利用することができます(JBoss FuseにはSpring Web ServiceコンポーネントというSpringによる実装や、単にHTTPを呼び出すためのコンポーネントなども含まれますが、今回は説明を割愛します)。
2.CamelルートをWebサービス化する
ここでは、次の2つを実装します。
- SOAP/HTTP によるWebサービス化
- RESTful Webサービス化
各手順を確認する前に、事前準備をします。まず、これら2つのCamelルートを作成するためのFuseプロジェクトを作成します。
設定 | 値 |
---|---|
Group Id | com.mycompany(デフォルト) |
Artifact Id | camel-archetype-blueprintを選択後、wsserverに変更(図3) |
Version | 1.0.0-SNAPSHOT |
Package | (Group IdとArtifact Idから自動生成) |
なお、Artifact IDとして「camel-archetype-blueprint」ではなく、「camel-archetype-cxf-code-first-blueprint」や「camel-archetype-cxf-contract-first-blueprint」を選択すると、SOAPサービスを利用したサンプルを確認することができます。
作成後、不要なクラスやCamelルート、テストコードは削除しておきます(図4の赤線箇所)。
次にFuseプロジェクト内の「pom.xml」に、以下の依存ライブラリ設定を追加します。必ずpom.xml内の
SOAP/HTTP によるWebサービス化
【手順1】インターフェース作成
SOAPのインターフェースとなるプログラムを作成します。
このインターフェースはString「OrderID」を受け取り、Stringデータを返します。インターフェースにはjavax.jws.WebServiceアノテーションを設定しています。
【手順2】Camelルート作成
以下のようなCamelルートを作成します([New]−[Camel XML File])。必ずOSGi Blueprintで作成するようにしてください。
設定 | 値 |
---|---|
RouteContainer | /wsserver/src/main/resources/OSGI-INF/blueprint |
File name | soapServer.xml |
Framework | OSGi Blueprint |
以下のように設定します。
位置 | 追加するノード | プロパティ | 設定 |
---|---|---|---|
1 | Endpoint | Uri | cxf:bean:orderEndpoint |
2 | Transform | Expression | OK : ${body} |
Language | simple |
設定ができたら保存します。処理の内容は、Webサービスのリクエストを受けたら、メッセージとして「OK:」を付与して返すというものになります。
【手順3】Camelルートへの設定追加
【手順2】でプロセスの大枠を作成したら、追加で設定を入れていきます。Sourceモードでリスト3の強調されている行を追記します。
この設定で追加しているのはCXFコンポーネントを利用するためのXMLスキーマの設定と、CXFコンポーネントが参照するWebサービスの設定です。XMLスキーマの設定(xmlns:cxf及び、xsi:schemaLocationに追加している箇所)についてはおまじないなので、この通りに設定してください。
Webサービスの設定では、以下のようなことをしています。
- uriの「cxf:bean:」の後に指定したIDで「cxf:cxfEndpoint」を参照する。
- 作成済みインターフェースを設定する。
【手順4】バンドルの作成
作成したJavaプログラム、Camelルートをバンドルとしてビルドします。JBoss Developer Studio(以下、JBDS)ではFUSEプロジェクトを右クリックし、[Run As]−[Maven Install]でビルドされます。ビルドされたバンドルは、Mavenリポジトリに格納されます。
【手順5】バンドルのインストール
Mavenリポジトリに格納されたバンドルをFuseサーバーインスタンスにインストールします。
JBossFuse:admin@root> osgi:install -s mvn:com.mycompany/wsserver/1.0.0-SNAPSHOT Bundle ID: 334
【手順6】確認
SOAPサービスのインストールに成功していると、「http://localhost:8181/cxf」において一覧に登録されています。
この一覧に表示されるWSDLの横にあるリンクをクリックすると、作成したWebサービスに対応するWSDLが表示されます(図7)。
Webサービスの動作確認は、SoapUIなどを用いて行います。