PR

JBoss Fuseを使ってみる その3:Webサービス編

2015年4月30日(木)
北東 孝雄

はじめに

連載5回目の今回は、JBoss FuseにおいてWebサービスを利用する手順について解説します。

Webサービス編では、以下の内容を理解します。

  1. JBoss FuseにおけるWebサービスの構成
  2. CamelルートをWebサービス化する
  3. WebサービスをCamelルートから呼び出す
  4. その他

作成するものの構成は図1のようになります。

今回作成するアプリケーション構成

図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サービス構成

図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 Idcom.mycompany(デフォルト)
Artifact Idcamel-archetype-blueprintを選択後、wsserverに変更(図3)
Version1.0.0-SNAPSHOT
Package(Group IdとArtifact Idから自動生成)
Fuseプロジェクトの作成

図3:Fuseプロジェクトの作成

なお、Artifact IDとして「camel-archetype-blueprint」ではなく、「camel-archetype-cxf-code-first-blueprint」や「camel-archetype-cxf-contract-first-blueprint」を選択すると、SOAPサービスを利用したサンプルを確認することができます。

作成後、不要なクラスやCamelルート、テストコードは削除しておきます(図4の赤線箇所)。

初期状態のFuseプロジェクト

図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 namesoapServer.xml
FrameworkOSGi Blueprint
SOAPサーバーのCamelルート

図5:SOAPサーバーのCamelルート

以下のように設定します。

各ノードの設定

位置追加するノードプロパティ設定
1EndpointUricxf:bean:orderEndpoint
2TransformExpressionOK : ${body}
Languagesimple

設定ができたら保存します。処理の内容は、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"/>
  1. uriの「cxf:bean:」の後に指定したIDで「cxf:cxfEndpoint」を参照する。
  2. 作成済みインターフェースを設定する。

【手順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」において一覧に登録されています。

SOAPサービスの確認

図6:SOAPサービスの確認

この一覧に表示されるWSDLの横にあるリンクをクリックすると、作成したWebサービスに対応するWSDLが表示されます(図7)。

作成したサービスに対応したWSDL

図7:作成したサービスに対応したWSDL

Webサービスの動作確認は、SoapUIなどを用いて行います。

SoapUIによる確認

図8:SoapUIによる確認

レッドハット株式会社

JBossサービス事業部 JBossコンサルタント
大学にて哲学を専攻後、沖電気工業、日本ティブコソフトウェアを経て、2013年にレッドハットに入社。主にインテグレーション系製品のコンサルティングサービスに従事。

連載バックナンバー

Think IT会員サービス無料登録受付中

Think ITでは、より付加価値の高いコンテンツを会員サービスとして提供しています。会員登録を済ませてThink ITのWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

他にもこの記事が読まれています

JBoss Fuseを使ってみる その3:Webサービス編 | Think IT(シンクイット)

Think IT(シンクイット)

サイトに予期せぬエラーが起こりました。しばらくたってから再度お試しください。