この例題は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 を開きます。
- インストールされたMuleのルートディレクトリから、 examples/ant/stockquote または examples/maven/stockquote に移動します。
- 「stockquote」スクリプトを実行します。以下のような設定の選択が要求されます:
- REST - RESTの設定を利用
- SOAP - SOAPの設定を利用
- WSDL - WSDLの設定を利用
- 設定を選択して、「Enter」キーを押下します。Welcome 画面が表示され、銘柄を入力するように要求されます。
- 「ibm」と入力して、「enter」キーを押下します。
- 株の情報が表示されます。
- 終了する場合は、「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="[^<.*]"/>
</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の設定

|