RailsでWebサービスを作成し、FlexからSOAPで呼び出す(Flex編)

RailsでWebサービスを作成し、FlexからSOAPで呼び出す(Rails編) からの続き。
Railsで(別にRailsじゃなくてもいいんだけど)実装した Webサービスを呼び出すアプリケーションを Flexで作ってみる。
先の記事で作成した hello Webサービスは、名前を聞いてこんにちは○○さんというメッセージを返す SayHelloというメソッドを持っている。これに対する呼び出しを行う最小の Flexアプリケーションは下記の通り。
この程度なら mx:Scriptブロックを記述する必要もない。
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute">
<mx:Label x="10" y="10" text="Webサービス(SOAP)呼び出し君"/>
<mx:Label x="10" y="36" text="お名前"/>
<mx:TextInput id="yourName" x="53" y="34"/>
<mx:Button x="221" y="34" label="送信"
click="helloService.SayHello.send()"/>
<mx:Text x="10" y="62" width="257" height="33"
text="{helloService.SayHello.lastResult}"/>
<mx:WebService id="helloService"
wsdl="http://my-rails-host:3000/hello/service.wsdl">
<mx:operation name="SayHello">
<mx:request>
<name>{yourName.text}</name>
</mx:request>
</mx:operation>
</mx:WebService>
</mx:Application>
mx:WebService (id:helloService)のインスタンス化が行われる際、自動的に指定のWSDL(http://my-rails-host:3000/hello/service.wsdl)がロードされ、Webサービスのエンドポイント(ひらたくいうとアクセス先URL)やメソッドの詳細といった情報が調査される。
ユーザーは自分の名前を TextInputフィールド(id:yourName)へ入力し、送信ボタンを押す。すると Flexのランタイムは入力された内容 (yourName.text で参照される) を name引数として用い、helloサービスの SayHelloメソッド( helloService.SayHello という名前で参照できる mx.rpc.soap.Operationオブジェクト )を SOAPでコールする(sendメソッド)。呼び出しは は非同期で行われるため、sendメソッドは即時に制御を戻す。
リクエストがサーバへ飛び、結果が返ってくるとそれは helloService.SayHello オブジェクトの lastResult プロパティに格納される。結果表示用の mx:Text オブジェクトは helloService.SayHello.lastResult を参照しているため、呼び出し結果が着信すると同時に文字列がそこへ表示されることになる。
lastResultはSOAP呼び出しの返値にふさわしい型のオブジェクトとなる。メソッドの返値が文字列(Rails側での :string) であれば String型だし、配列であれば Array型、構造体であれば Object型が用いられ動的プロパティで構造体の各メンバが表現される。

0 件のコメント:
コメントを投稿
<< ホーム