Packagejp.co.fujitsu.reffi.client.flex.model.rpc
Classpublic class WebServiceCore
InheritanceWebServiceCore Inheritance RPCCore Inheritance BaseModel Inheritance flash.events.EventDispatcher

[概 要]

リモートサーバにSOAPリクエストを行う為の機能モデルクラスです.

[詳 細]

WSDLが公開されているSOAPベースのWebサービスと通信を行います。 提供されているサービスメソッドの粒度が細かい場合、アクションにこのクラスを複数登録することで 1アクション内でマッシュアップが可能です。
上記のように一つ一つの機能が少ないサービスメソッドが用意されている場合、 従業員名を元にEmailを送信するアクションは以下のようにSOAPリクエストを定義します。
     public class WebServiceMashUpAction extends BaseAction {
     
            override protected function reserveModels(models:Array):void {
                // getEmployeeId用
                models.push(Class(WebServiceCore));
                
                // getEmployeeEmailAddress用
                models.push(Class(WebServiceCore));
                
                // sendEmail用
                models.push(Class(WebServiceCore));
            }
            
            override public function nextModel(index:int, prev:ModelProcessEvent, next:BaseModel):Boolean {
    
                WebServiceCore(next).wsdl = "employeeService?wsdl";
    
                switch(index) {
                    case 0:
                        var employeeName:String = TextInput(getComponentByName("txtEmployeeName")).text;
    
                        WebServiceCore(next).methodName = "getEmployeeId";
                        WebServiceCore(next).addWsParameter(employeeName);
                        break;
                    case 1:
                        var employeeId:String = ResultEvent(prev.cause).result as String;
                        
                        WebServiceCore(next).methodName = "getEmployeeEmailAddress";
                        WebServiceCore(next).addWsParameter(employeeId);
                        break;
                    case 2:
                        var employeeEmailAddress:String = ResultEvent(prev.cause).result as String;
                        WebServiceCore(next).methodName = "sendEmail";
                        WebServiceCore(next).addWsParameter(employeeEmailAddress);
                        WebServiceCore(next).addWsParameter(TextInput(getComponentByName("taEmailContent")).text);
                        break;
                }
                
                return true;
            }
            
            override public function failureForward(index:int, model:BaseModel, faultEvent:Event):Event {
                switch(index) {
                    case 0:
                        trace("従業員名が登録されていません");
                        break;
                    case 1:
                        trace("Emailアドレスが登録されていません");
                        break;
                    case 2:
                        trace("Email送信中にエラーが発生しました");
                        break;
                }
                
                return faultEvent;
            }
            
            override public function complete():void {
                trace("Emailを送信しました");
            }
        }
  
  

[備 考]



SOAP WebServiceメソッドにリクエストする 以下はシンプルなSOAP WebServiceを起動してクライアントからアクセスする例です。 ・サーバ側
・GreenSheet型(POJO)リストを返却するWebService(Java)
getGreenSheetInfoはcsvからグリーンシートデータリストを取得 してクライアントに返却する単純なサービスメソッドです。
        package test.server;
        
        import java.io.BufferedReader;
        import java.io.FileInputStream;
        import java.io.IOException;
        import java.io.InputStreamReader;
        import java.util.ArrayList;
        import java.util.List;
        import java.util.StringTokenizer;
        
        import javax.annotation.Resource;
        import javax.jws.WebParam;
        import javax.jws.WebResult;
        import javax.jws.WebService;
        import javax.servlet.ServletContext;
        import javax.xml.ws.WebServiceContext;
        import javax.xml.ws.handler.MessageContext;
        
        
        @WebService
        public class DummyService {
            
            @Resource
            private WebServiceContext wsContext;
        
            @WebResult(name="getGreenSheetReturn")
            public List<GreenSheet> getGreenSheetInfo(@WebParam String brandName) throws IOException{
                List<GreenSheet> greenSheetInfo = new ArrayList<GreenSheet>();
                
                MessageContext msgContext = wsContext.getMessageContext();
                ServletContext servletContext = (ServletContext) msgContext
                        .get(MessageContext.SERVLET_CONTEXT);
                String filePath = servletContext.getRealPath("/greensheet.csv");
        
                FileInputStream fis = new FileInputStream(filePath);
                InputStreamReader in = new InputStreamReader(fis,"SJIS");
                BufferedReader br = new BufferedReader(in); 
                
                String line = null;
                while((line = br.readLine()) != null){
                    StringTokenizer tokenizer = new StringTokenizer(line, ",");
    
                    GreenSheet greenSheet = new GreenSheet();
        
                    greenSheet.setRegistDate(tokenizer.nextToken());
                    greenSheet.setMemberName(tokenizer.nextToken());
                    greenSheet.setBrandName(tokenizer.nextToken());
                    greenSheet.setMarket(tokenizer.nextToken());
                    greenSheet.setHandlingBrand(tokenizer.nextToken());
                    greenSheet.setPublicDivision(tokenizer.nextToken());
                    greenSheet.setTradeDate(tokenizer.nextToken());
                    greenSheet.setBuyAndSellDivision(tokenizer.nextToken());
                    greenSheet.setAmount(tokenizer.nextToken());
                    greenSheet.setPrice(tokenizer.nextToken());
                    greenSheet.setOpponent(tokenizer.nextToken());
                    greenSheet.setDivision(tokenizer.nextToken());
                    
                    if("".equals(brandName) || brandName.equals(greenSheet.getBrandName())) {
                        greenSheetInfo.add(greenSheet);
                    }
                }
                
                br.close();
                fis.close();
                
                return greenSheetInfo;
            }
        }
  
・web.xmlにDummyServiceクラスをWebサービス登録
http://ドメイン/コンテキストルート/dummyservice?wsdlでWSDL公開します。
        <servlet>
            <servlet-name>DummyWS</servlet-name>
            <servlet-class>test.server.DummyService</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>DummyWS</servlet-name>
            <url-pattern>/dummyservice</url-pattern>
        </servlet-mapping>
  
クライアント側
・dummyserviceにアクセスするアクションクラス
公開したWSDLを参照してDummyServiceクラスのgetGreenSheetInfoメソッドを呼び出します。
getGreenSheetInfoメソッドの引数は、画面上のブランド名入力TextInput(txtBrandName)から取得しています。
successForwardで取得するresultEventにはSOAPレスポンスがObjectフォーマットで格納されています。
このレスポンスフォーマットをXMLやE4X形式に変更したい場合は、resultFormatプロパティに RPCCore.XMLやRPCCore.E4Xを指定してWebServiceCoreを実行します。
        package test.client.action {
            import flash.events.Event;
            
            import jp.co.fujitsu.reffi.client.flex.action.BaseAction;
            import jp.co.fujitsu.reffi.client.flex.events.ModelProcessEvent;
            import jp.co.fujitsu.reffi.client.flex.model.BaseModel;
            import jp.co.fujitsu.reffi.client.flex.model.rpc.WebServiceCore;
            
            import mx.collections.ArrayCollection;
            import mx.controls.TextInput;
            import mx.rpc.events.ResultEvent;
        
            public class SOAPRequestAction extends BaseAction {
                
                override protected function reserveModels(models:Array):void {
                    models.push(Class(WebServiceCore));
                }
                
                override public function nextModel(index:int, prev:ModelProcessEvent, next:BaseModel):Boolean {
                    if(index == 0) {
                        var brandName:String = TextInput(getComponentByName("txtBrandName")).text;
                        
                        WebServiceCore(next).wsdl = "dummyservice?wsdl";
                        WebServiceCore(next).methodName = "getGreenSheetInfo";
                        WebServiceCore(next).addWsParameter(brandName);
                    }
                    
                    return true;
                }
                
                override public function successForward(index:int, model:BaseModel, resultEvent:Event):void {
                    var results:ArrayCollection = ResultEvent(resultEvent).result as ArrayCollection;
                    for each(var greenSheet:Object in results) {
                        trace(
                                greenSheet["registDate"] + ", " +
                                greenSheet["memberName"] + ", " +
                                greenSheet["brandName"] + ", " +
                                greenSheet["market"] + ", " +
                                greenSheet["handlingBrand"] + ", " +
                                greenSheet["publicDivision"] + ", " +
                                greenSheet["tradeDate"] + "," +
                                greenSheet["buyAndSellDivision"] + ", " +
                                greenSheet["amount"] + ", " +
                                greenSheet["price"] + ", " +
                                greenSheet["opponent"] + ", " +
                                greenSheet["division"]
                        );
                    }
                }
                
                override public function complete():void {
                    trace("SOAP Request Complete");
                }
            }
        }
  
・実行結果
        2009/3/1, ○○証券代行株式会社, ○○ソフトウェアエンジニアリング, エマージング, 株券, 毎日, 2009/3/1,売, 50, 25500, △△証券株式会社, 委託売買
        2009/3/1, ○○証券代行株式会社, ○○ソフトウェアエンジニアリング, リージョナル, 株券, 毎日, 2009/3/1,買, 50, 25500, ××証券株式会社, 委託売買
            :
            :
        2009/3/1, ○○証券代行株式会社, ○○ソフトウェアエンジニアリング, エマージング, 株券, 毎日, 2009/3/1,売, 13, 25000, △△証券株式会社, 委託売買
        2009/3/1, ○○証券代行株式会社, ○○ソフトウェアエンジニアリング, フェニックス, 株券, 毎日, 2009/3/1,買, 13, 25000, △△証券株式会社, 委託売買
        SOAP Request Complete
  

Copyright (c) 2008-2009 FUJITSU Japan All rights reserved.



Public Properties
 PropertyDefined by
 InheritedasyncToken : Object

[概 要]

非同期通信トークンです.
RPCCore
 Inheritedcache : Dictionary
[static]

[概 要]

static通信オブジェクトキャッシュプロパティです.
RPCCore
 InheritedcacheMode : Boolean

[概 要]

通信先が同じであれば各種通信オブジェクトをキャッシュします.
RPCCore
 Inheritedcontroller : BaseController

[概 要]

このモデルを起動したコントローラインスタンスです.
BaseModel
 InheritedexecuteIndex : int

[概 要]

実行インデックス設定.
BaseModel
  headers : Array

[概 要]

SOAPヘッダ情報です.
WebServiceCore
  methodName : String

[概 要]

実行するメソッド名です.
WebServiceCore
 InheritedparameterMapping : ParameterMapping

[概 要]

MVC各レイヤを伝播するパラメータオブジェクトです.
BaseModel
  resultFormat : String

[概 要]

受信データフォーマットです.
WebServiceCore
 Inheritedservice : IEventDispatcher

[概 要]

継承先で定義される、各種通信オブジェクトのI/Fです.
RPCCore
 Inheritedskip : Boolean

[概 要]

このモデルを実行するか、コントローラが判断する為のフラグです.
BaseModel
 InheritedsuccessCount : int

[概 要]

モデルインスタンス生存中に、何回モデル処理が成功したかを保持します.
BaseModel
  wsdl : String

[概 要]

読み込むWSDLのロケーションです.
WebServiceCore
  wsParameter : Array

[概 要]

メソッド引数です.
WebServiceCore
Public Methods
 MethodDefined by
  
addHeader(header:Object):void

[概 要]

SOAPヘッダ情報を追加します.
WebServiceCore
  
addWsParameter(value:Object):Object

[概 要]

メソッド引数を追加します.
WebServiceCore
 Inherited

[概 要]

モデル処理失敗イベントを発行するメソッドです.
BaseModel
 Inherited

[概 要]

モデル処理完了イベントを発行するメソッドです.
BaseModel
 Inherited

[概 要]

モデル処理成功イベントを発行するメソッドです.
BaseModel
 Inherited

[概 要]

ModelProcessEvent.SUCCESS発行回数を1増加させます.
BaseModel
 Inherited
[static]

[概 要]

通信オブジェクトキャッシュを全て削除します.
RPCCore
 Inherited
removeCache(cacheId:String):void
[static]

[概 要]

通信オブジェクトキャッシュを削除します.
RPCCore
 Inherited
run():void

[概 要]

コントローラにコールされるモデルの主幹メソッドです.
BaseModel
Protected Methods
 MethodDefined by
  
cacheId():String

[概 要]

キャッシュモード実行時、通信オブジェクトを識別する為のIDを返却します.
WebServiceCore
  
createConcreteService():IEventDispatcher

[概 要]

具象通信オブジェクトを作成します.
WebServiceCore
 Inherited
faultHandler(event:FaultEvent):void

[概 要]

受信失敗ハンドラです.
RPCCore
 Inherited
finallyProc():void

[概 要]

run()が終了したタイミングでテンプレートコールされるメソッドです.
BaseModel
  

[概 要]

通信成功、失敗に関わらずコールされます.
WebServiceCore
 Inherited
mainProc():void

[概 要]

メイン処理メソッドです.
RPCCore
 Inherited
onFailure(event:FaultEvent, parameterMapping:ParameterMapping):void

[概 要]

受信失敗処理用オーバーライドメソッドです.
RPCCore
 Inherited
onFinish(parameterMapping:ParameterMapping):void

[概 要]

通信終了処理実装メソッドです.
RPCCore
 Inherited
onSuccess(event:ResultEvent, parameterMapping:ParameterMapping):void

[概 要]

受信成功処理用オーバーライドメソッドです.
RPCCore
 Inherited
postProc():void

[概 要]

後処理テンプレートメソッドです.
BaseModel
 Inherited
preProc():Boolean

[概 要]

前処理テンプレートメソッドです.
BaseModel
 Inherited
resultHandler(event:ResultEvent):void

[概 要]

受信成功ハンドラです.
RPCCore
  
send(dispatcher:IEventDispatcher):Object

[概 要]

メイン処理メソッドです.
WebServiceCore
 Inherited
trap(e:Error):Error

[概 要]

非同期通信開始前のエラーをハンドリングします.
RPCCore
Public Constants
 ConstantDefined by
 InheritedE4X : String = "e4x"
[static] レスポンス返却フォーマット「e4x」を示す定数です.
RPCCore
 InheritedOBJECT : String = "object"
[static] レスポンス返却フォーマット「object」を示す定数です.
RPCCore
 InheritedXML : String = "xml"
[static] レスポンス返却フォーマット「xml」を示す定数です.
RPCCore
Property detail
headersproperty
headers:Array  [read-write]

[概 要]

SOAPヘッダ情報です.

[詳 細]

既存のSOAPヘッダ情報は全て上書きされます。

[備 考]

実装
    public function get headers():Array
    public function set headers(value:Array):void
methodNameproperty 
methodName:String  [read-write]

[概 要]

実行するメソッド名です.

[詳 細]

WSDLに記述されているメソッド名を指定します。

[備 考]

実装
    public function get methodName():String
    public function set methodName(value:String):void
resultFormatproperty 
resultFormat:String  [read-write]

[概 要]

受信データフォーマットです.

[詳 細]

「object」「e4x」「xml」が指定可能です。

[備 考]

The default value is object.

実装
    public function get resultFormat():String
    public function set resultFormat(value:String):void

関連項目

jp.co.fujitsu.reffi.client.flex.model.RPCCore
wsdlproperty 
wsdl:String  [read-write]

[概 要]

読み込むWSDLのロケーションです.

[詳 細]

[備 考]

実装
    public function get wsdl():String
    public function set wsdl(value:String):void
wsParameterproperty 
wsParameter:Array  [read-write]

[概 要]

メソッド引数です.

[詳 細]

methodNameで指定したメソッドが持つパラメータです。 第一引数、第二引数・・・と順番に値が入ります。

[備 考]

実装
    public function get wsParameter():Array
    public function set wsParameter(value:Array):void
Method detail
addHeader()method
public function addHeader(header:Object):void

[概 要]

SOAPヘッダ情報を追加します.

[詳 細]

既に登録されているSOAPヘッダ情報に追加登録します。

[備 考]

パラメータ
header:Object — SOAPヘッダ情報
addWsParameter()method 
public function addWsParameter(value:Object):Object

[概 要]

メソッド引数を追加します.

[詳 細]

methodNameで指定したメソッドのパラメータを設定します。
呼び出すサービスメソッドが以下のようなシグネチャを持っている場合、
public int registProduct(int productId, String productName);
addWsParameter(5);
addWsParameter("ノートPC");
のように追加します。

[備 考]

パラメータ
value:Object

戻り値
Object
cacheId()method 
protected override function cacheId():String

[概 要]

キャッシュモード実行時、通信オブジェクトを識別する為のIDを返却します.

[詳 細]

wsdlプロパティを返却します。
cacheIdはcacheModeプロパティがtrueの場合のみ使用されます。

[備 考]

戻り値
String — 通信オブジェクトを識別する為のキャッシュID
createConcreteService()method 
protected final override function createConcreteService():IEventDispatcher

[概 要]

具象通信オブジェクトを作成します.

[詳 細]

WebServiceオブジェクトを生成して返却します。

[備 考]

戻り値
IEventDispatcher — WebServiceオブジェクト
finishConnect()method 
protected final override function finishConnect():void

[概 要]

通信成功、失敗に関わらずコールされます.

[詳 細]

処理は有りません。

[備 考]

通信終了処理実装はonFinishをオーバーライドしてください。
send()method 
protected override function send(dispatcher:IEventDispatcher):Object

[概 要]

メイン処理メソッドです.

[詳 細]

WebServiceオブジェクトに対してプロパティ情報を設定して通信を開始します。 通信確立の為以下の処理が行われます。

[備 考]

パラメータ
dispatcher:IEventDispatcher

戻り値
Object — AsyncToken