0
点赞
收藏
分享

微信扫一扫

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);
}

 

举报

相关推荐

0 条评论