FLEX实践—动态执行WebService方法

先看一段代码:
var ws:WebService ;

//调用WebService服务端发布的login(username,password)方法

private function doLogin():void{

ws = new WebService();

ws.wsdl = "http://localhost:9090/HelloWorld/LoginService?wsdl";

ws.loadWSDL();

//调用login方法,方法参数为username,password

ws.login.addEventListener(ResultEvent.RESULT,loginSuccessHandler);

ws.login.addEventListener(FaultEvent.FAULT,loginFailHandler);

ws.login("meteor","123");

}

private function loginSuccessHandler(event:ResultEvent):void{

Alert.show("Login Successful!");

}

private function loginFailHandler(event:FaultEvent):void{

Alert.shor("Login fail!");

}

//调用WebService服务端发布的getInfo()方法

private function doLogin():void{

ws = new WebService();

ws.wsdl = "http://localhost:9090/HelloWorld/getInfoWervice?wsdl";

ws.loadWSDL();

//调用getInfo方法

ws.getInfo.addEventListener(ResultEvent.RESULT,getInfoHandler);

ws.getInfo.loginaddEventListener(FaultEvent.FAULT,faultHandler);

ws.getInfo();

}

private function getInfoHandler(event:ResultEvent):void{

Alert.show("Get info Successful!");

}

private function faultHandler(event:FaultEvent):void{

Alert.shor(event.fault.message);

}

以上代码中存在很多重复片段:每次调用WebService,都要写重复的代码。下面来创建一个动态的WebService服务类

package common.service
{
import mx.controls.Alert;
import mx.rpc.AbstractOperation;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.soap.SOAPHeader;
import mx.rpc.soap.WebService;

public class BaseWebService extends WebService
{
   private var _callBackHandler:Function;
   private var _faultHandler:Function;
   private var _args:Array;
   public function BaseWebService()
   {
    super();
   
   }
   public function set callBackHandler(callBackHandler:Function):void{
    this._callBackHandler = callBackHandler;
   }
   public function get callBackHandler():Function{
    return this._callBackHandler;
   }
   public function set args(args:Array):void{
    this._args = args;
   }
   public function get args():Array{
    return this._args;
   }
   public function set faultHandler(faultHandler:Function){
    this._faultHandler = faultHandler;
   }
   public function get faultHandler():Function{
    return this._faultHandler;
   }
   public function initWsdl(wsdl:String):void{
    this.wsdl = wsdl;
    this.loadWSDL();
   }
   public function initHeader(header:SOAPHeader):void{
    this.clearHeaders();
    this.addHeader(header);
   }
   public function sendOperation(functionName:String,args:Array):void{
    //根据方法名动态调用WebService服务器的方法
    var operation:AbstractOperation = this.getOperation(functionName);
    //为调用的方法添加监听器,回调函数由外部动态传入
    operation.addEventListener(ResultEvent.RESULT,this.callBackHandler);
    //为调用的方法添加错误监听器,如果传入的错误处理方法为空,则调用默认的处理方法
    if(this.faultHandler){
     operation.addEventListener(FaultEvent.FAULT,this.faultHandler); 
    }else{
     operation.addEventListener(FaultEvent.FAULT,defaultFaultHandler); 
    }
    //为调用的方法传参数,参数类型为Array
    operation.arguments = args;
    //执行调用的方法
    operation.send();
   
   }
   private function defaultFaultHandler(event:FaultEvent):void{
     Alert.show(event.fault.message);
     }

}
}

在mxml中调用

var ws:BaseWebService;
private function login():void{

ws = new BaseWebService();

ws.initWsdl("http://localhost:9090/HelloWorld/getInfoWervice?wsdl");

ws.sendOperation("login");

ws.callBackHandler = loginSuccessHandler;

ws.faultHandler = loginFailHandler;
var arr:Array = new Array();
arr.push("meteor");
arr.push("123");

ws.sendOperation("login",arr);

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

stoneson

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值