flex除了可以和spring整合之外,有时也会使用flex去访问webservice,flex提供了访问webservice的一套方法使用起来也是特别的简单。下面分享我的学习成果
1.寻找用于测试的webservice服务
http://www.webxml.com.cn/zh_cn/index.aspx
这个网站提供了许多webservice,可以供我们学习和使用
2.开始使用flex请求webservice,这里就使用号码归属地和天气预报作为例子
(1)使用flex标签载入wsdl
<s:WebService wsdl="http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl" id="webservice">
<s:operation name="getMobileCodeInfo" result="getMessage(event)" fault="onFault(event)"/>
</s:WebService>
<s:WebService wsdl="http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl" id="webservice2" >
<s:operation name="getWeather" result="getWeatherResult(event)" resultFormat="object" fault="onFault(event)"/>
</s:WebService>
wsdl就是web服务的wsdl地址,id一定要写上方便后面使用,operation里的name就是webservice暴露出来的方法,result则是回调函数,fault表示出现错误后的函数调用,这个不配置也OK
(2) 调用手机号码归属地服务
webservice.getOperation("getMobileCodeInfo").send(number.text);
webservice是第一个标签的id,表示我们要使用里面的服务,getOperation的参数就是要调用方法名称,send里面是我们要提供给服务器的参数
(3)使用回调函数处理webservice返回结果
var ss:String=event.result as String;
Alert.show(ss);
天气预报服务也是如此,但是要注意的是天气预报服务返回的是一个一维数组
天气预报返回结果如下:
下面是全部的代码:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
<s:WebService wsdl="http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl" id="webservice">
<s:operation name="getMobileCodeInfo" result="getMessage(event)" fault="onFault(event)"/>
</s:WebService>
<s:WebService wsdl="http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl" id="webservice2" >
<s:operation name="getWeather" result="getWeatherResult(event)" resultFormat="object" fault="onFault(event)"/>
</s:WebService>
</fx:Declarations>
<fx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.rpc.events.ResultEvent;
import mx.events.CloseEvent;
public function getMessage(event:ResultEvent){
var ss:String=event.result as String;
Alert.show(ss);
}
public function getWeatherResult(event2:ResultEvent):void{
var ss2:ArrayCollection=ArrayCollection(event2.result);
Alert.show(ss2[1]+"\n"+ss2[4]+"\n"+ss2[5]);
}
public function invokeWebservice(event:Event){
webservice.getOperation("getMobileCodeInfo").send(number.text);
}
public function invokeWebservice2(event:Event){
webservice2.getOperation("getWeather").send(city.text,'');
}
public function onFault(event:Event):void{
Alert.show("访问错误");
}
/*public function show(event:Event):void{
Alert.yesLabel = '是';
Alert.noLabel = '否';
Alert.cancelLabel = '取消';
Alert.show('确认操作无误吗','确认?',1|2|8,this,back);
}
public function back(event:CloseEvent):void{
if(event.detail==Alert.YES){
Alert.show("你选择了是");
}else if(event.detail==Alert.NO){
Alert.show("你选择了否");
}else{
Alert.show("你选择了取消");
}
}*/
]]>
</fx:Script>
<s:VGroup>
<s:HGroup paddingTop="30" verticalAlign="middle">
<s:Label text="输入你的电话号码"/>
<s:TextInput id="number"/>
<s:Button label="获取号码归属地" click="invokeWebservice(event)"/>
</s:HGroup>
<s:HGroup paddingTop="30" verticalAlign="middle">
<s:Label text="输入城市名称"/>
<s:TextInput id="city"/>
<s:Button label="获取天气" click="invokeWebservice2(event)"/>
</s:HGroup>
<!-- <s:HGroup paddingTop="30" verticalAlign="middle">
<s:Button label="显示确认框" click="show(event)"/>
</s:HGroup> -->
</s:VGroup>
</s:Application>