JBoss Fuseを使ってみる その3:Webサービス編
![](https://thinkit.co.jp/sites/default/files/styles/main_image_730x/public/main_images/5926_main_8.png?itok=cU8lAz8-)
はじめに
連載5回目の今回は、JBoss FuseにおいてWebサービスを利用する手順について解説します。
Webサービス編では、以下の内容を理解します。
- JBoss FuseにおけるWebサービスの構成
- CamelルートをWebサービス化する
- WebサービスをCamelルートから呼び出す
- その他
作成するものの構成は図1のようになります。
![今回作成するアプリケーション構成](/sites/default/files/592601.png)
図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)。
![FuseのWebサービス構成](/sites/default/files/592602.png)
図2:FuseのWebサービス構成
図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プロジェクトを作成します。
サーバー用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プロジェクト](/sites/default/files/592604.png)
図4:初期状態のFuseプロジェクト
次にFuseプロジェクト内の「pom.xml」に、以下の依存ライブラリ設定を追加します。必ずpom.xml内の
リスト1:pom.xmlに追加する依存ライブラリの設定
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-cxf</artifactId> <version>2.12.0.redhat-610379</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>2.7.0.redhat-610379</version> </dependency>
SOAP/HTTP によるWebサービス化
【手順1】インターフェース作成
SOAPのインターフェースとなるプログラムを作成します。
リスト2
package com.mycompany.wsserver; import javax.jws.WebService; @WebService public interface OrderEndpoint { String order(String OrderID); }
このインターフェースはString「OrderID」を受け取り、Stringデータを返します。インターフェースにはjavax.jws.WebServiceアノテーションを設定しています。
【手順2】Camelルート作成
以下のようなCamelルートを作成します([New]−[Camel XML File])。必ずOSGi Blueprintで作成するようにしてください。
SOAPサーバーのCamelルート設定
設定 | 値 |
---|---|
RouteContainer | /wsserver/src/main/resources/OSGI-INF/blueprint |
File name | soapServer.xml |
Framework | OSGi Blueprint |
![SOAPサーバーのCamelルート](/sites/default/files/592605.png)
図5:SOAPサーバーのCamelルート
以下のように設定します。
各ノードの設定
位置 | 追加するノード | プロパティ | 設定 |
---|---|---|---|
1 | Endpoint | Uri | cxf:bean:orderEndpoint |
2 | Transform | Expression | OK : ${body} |
Language | simple |
設定ができたら保存します。処理の内容は、Webサービスのリクエストを受けたら、メッセージとして「OK:」を付与して返すというものになります。
【手順3】Camelルートへの設定追加
【手順2】でプロセスの大枠を作成したら、追加で設定を入れていきます。Sourceモードでリスト3の強調されている行を追記します。
リスト3
<?xml version="1.0" encoding="UTF-8"?> <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:camel="http://camel.apache.org/schema/blueprint" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cxf="http://camel.apache.org/schema/blueprint/cxf" xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd http://camel.apache.org/schema/blueprint/cxf http://camel.apache.org/schema/blueprint/cxf/camel-cxf.xsd http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd"> <cxf:cxfEndpoint id="orderEndpoint" address="/order/" serviceClass="com.mycompany.wsserver.OrderEndpoint"/> <camelContext trace="false" xmlns="http://camel.apache.org/schema/blueprint"> <route> <from uri="cxf:bean:orderEndpoint"/> <transform> <constant>OK : ${body}</constant> </transform> </route> </camelContext> </blueprint>
この設定で追加しているのはCXFコンポーネントを利用するためのXMLスキーマの設定と、CXFコンポーネントが参照するWebサービスの設定です。XMLスキーマの設定(xmlns:cxf及び、xsi:schemaLocationに追加している箇所)についてはおまじないなので、この通りに設定してください。
Webサービスの設定では、以下のようなことをしています。
リスト4
<cxf:cxfEndpoint id="orderEndpoint" (1) address="/order/" serviceClass="com.mycompany.wsserver.OrderEndpoint"/> (2) <camelContext trace="false" xmlns="http://camel.apache.org/schema/blueprint"> <route> <from uri="cxf:bean:orderEndpoint"/>
- 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などを用いて行います。