Skip navigation

この例題はESB MuleからASPX Web Serviceを起動し、結果をXSLTで変換し、その結果をデシリアライズして、StockQuote Javabeanに設定します。この例題はREST及びSOAPを使ってサービスの起動の仕方を見せます。

例題ではシステム・ストリーム・コネクタを使ってユーザが入力(System.in)した株の銘柄を取得し、StockQuoteサービスを起動し、結果をXSLTを使って変換し、XmlToObjectトランスフォーマーを使って結果をStockQuote Javabeanに変換します。最後に価格を出力コンソール(System.out)に書き出します。


アプリケーションの実行

前提条件

実行するには、以下が必要です。

オプション条件

  • Mavenコマンドを実行する必要がある場合は、ビルドツールMavenを(バージョン2.0.4以降)をApacheサイトから取得してください。(Mavenのダウンロード
  • Antコマンドを実行する必要がある場合は、ビルドツールAnt(バージョン1.6.5以降)をApacheサイトから取得してください。 (Antのダウンロード

実行

  1. シェル *1 を開きます。
  2. インストールされたMuleのルートディレクトリから、 examples/ant/stockquote または examples/maven/stockquote に移動します。
  3. 「stockquote」スクリプトを実行します。以下のような設定の選択が要求されます:
    1. REST - RESTの設定を利用
    2. SOAP - SOAPの設定を利用
    3. WSDL - WSDLの設定を利用
  4. 設定を選択して、「Enter」キーを押下します。Welcome 画面が表示され、銘柄を入力するように要求されます。
  5. 「ibm」と入力して、「enter」キーを押下します。
  6. 株の情報が表示されます。
  7. 終了する場合は、「CTRL」+「C」キーを同時に押下します。

-
* シェルというのは、Unix/Linuxではコマンドシェルのことを、Windowsではコマンドプロンプトのことを指しています。

処理の説明

RESTの設定に付いて処理の説明を行います。SOAPの場合も類似した処理を行っています。

Echoサンプルを実行して説明を読んだことを前提にして、行毎の詳細な説明は割愛させて頂きます。

先ず、トランスフォーマーを設定します:

<transformers>
    <transformer name="XmlToObject" className="org.mule.transformers.xml.XmlToObject"/>
    <transformer name="SgmlDecoder" className="org.mule.transformers.codec.SgmlEntityDecoder"/>
    <transformer name="Xslt" className="org.mule.transformers.xml.XsltTransformer">
        <properties>
            <property name="xslFile" value="stock.xsl"/>
        </properties>
    </transformer>
</transformers>

3つのトランスフォーマーが使われます-xmlToObject, SgmlDecoder, Xslt。Xsltトランスフォーマーを使う場合は、xslFileプロパティをクラスパスに含まれているディレクトリ下のXSLTファイルに設定します。上の設定では、これらの3つのトランスフォーマーは連鎖されます。

株価サービスはRESTサービスをESB Muleのローカル・サービスのように使うことが出きるようにする、RESTサービス・ラッパーコンポーネントを使います。

<mule-descriptor name="RESTServiceWrapper"
    implementation="org.mule.components.rest.RestServiceWrapper">
    <inbound-router>
        <endpoint address="stream://System.in"/>
    </inbound-router>
    <outbound-router>
        <router className="org.mule.routing.outbound.FilteringOutboundRouter">
            <endpoint address="stream://System.out" transformers="SgmlDecoder Xslt XmlToObject"/>
        </router>
    </outbound-router>
    <properties>
        <property name="serviceUrl" value="http://www.webservicex.net/stockquote.asmx/GetQuote"/>
        <list name="payloadParameterNames">
             <entry value="symbol"/>
        </list>
        <property name="httpMethod" value="POST"/>
        <property name="errorExpression" value="[^&lt;.*]"/>
    </properties>
</mule-descriptor>

コンポーネントは銘柄をSystem.inから取得して、株価をSystem.outに出力します。出力エンドポイント(outbound-routerのrouterタグ)に設定されているトランスフォーマーに注意してください。ESB Muleでは複数のトランスフォーマーを連鎖することができます。

RestServiceWrapperには複数のプロパティが設定されています。 serviceUrl は呼び出すRESTサービスのURLです。 payloadParameterNames はメッセージ・ペイロードと関連付けるパラメータの名前の一覧です。この例では「symbol」というパラメータが1つかありません。 httpMethod にはGET又はPOSTを設定します。最後に errorExpression はエラーの有無を判定するための、サービスの結果に適用する正規表現です。この例では、StockQuoteサービスはエラーの場合は非xml文字列を返します。

SOAP版

RESTとの違いは設定です。ESB MuleでSOAPを利用する場合は、受信(inbound)エンドポイントから送信(outbound)エンドポイントに引き渡すブリッジ・コンポーネントを使い、StockQuoteサービスに引き渡すために名前付きパラメータをAxisの送信(outbound)エンドポイントに設定します。

<mule-descriptor name="serviceProxy" implementation="org.mule.components.simple.BridgeComponent">
    <inbound-router>
        <endpoint address="stream://System.in"/>
    </inbound-router>
    <outbound-router>
    <!-- we use a chaining transformer to send the results of one endpoint execution as the input
       for the next endpoint.  In this case it writes it out to System.out -->
    <router className="org.mule.routing.outbound.ChainingRouter">
        <endpoint address="axis:http://www.webservicex.net/stockquote.asmx?method=GetQuote">
            <properties>
                <property name="soapAction" value="${methodNamespace}${method}"/>
                <map name="soapMethods">
                    <list name="qname{GetQuote:http://www.webserviceX.NET/}">
                        <entry value="symbol;string;in"/>
                        <entry value="GetQuoteResult;string;out"/>
                    </list>
                </map>
            </properties>
        </endpoint>
        <endpoint address="stream://System.out" transformers="SgmlDecoder Xslt XmlToObject"/>
    </router>
    </outbound-router>
</mule-descriptor>

全設定ファイルは以下のページで見ることができます:

株価例外のESB Mule構成図

ESB Mule構成図ツールを使って生成した株価例題の構成図です。
(画像をクリックすると拡大します。)

SOAPの設定

RESTの設定

Adaptavist Theme Builder Powered by Atlassian Confluence