最近做公司的一个项目,需要与公司别的部门进行资料串联。商量之后,选择的方式非侵入式的资料串联方式(何谓侵入式资料串联?比如说直接连接别人的 DB 读取资料,众所周知,这是不可取的。)。具体的,就是对方生成 WebService,然后我这边通过WebService抓取所需资讯。
今天对方把WebService生成好了,然后请我们测试抓取资料是否OK,测试的例子因为涉及公司的机密,在这里该成天气预报的例子写下来:
如果你是一个学习Flex的新人,那么请先安装Flex Builder3或者给Eclipse安装Flex的插件。这个例子中我们采用国家气象局提供的WebService来查询天气预报,WebService地址如下:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl。你可以在浏览器中打开这个地址,从中可以看到这么一段xml:
- - <s:element name=”getWeatherbyCityName”>
- - <s:complexType>
- - <s:sequence>
- <s:element minOccurs=”0″ maxOccurs=”1″ name=”theCityName” type=”s:string” />
- </s:sequence>
- </s:complexType>
- </s:element>
- - <s:element name=”getWeatherbyCityNameResponse”>
- - <s:complexType>
- - <s:sequence>
- <s:element minOccurs=”0″ maxOccurs=”1″ name=”getWeatherbyCityNameResult” type=”tns:ArrayOfString” />
- </s:sequence>
- </s:complexType>
- </s:element>
其中getWeatherbyCityName就是请求WS返回特定城市天气预报的函数名称,而theCityName就是城市名的参数(其实这个参数你只 要将合法的城市名以String格式传给getWeatherbyCityName就可以了。getWeatherbyCityNameResponse表述的是它的返回值,并且返回值类型为:ArrayOfString.因此在Flex程序用ArrayColection来接收返回值.
编写程序如下:
- <?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” fontSize=”13″
layout=”absolute” horizontalAlign=”center”>
<mx:Style source=”/style/style.css”/>
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.collections.ArrayCollection;
import mx.rpc.events.ResultEvent;
function onload(event:ResultEvent):void{
resetWeather();
var weatherInfo:ArrayCollection = (event.result) as ArrayCollection;
for(var i:int=0; i<weatherInfo.length; i++){
myWeatherReport.text += weatherInfo[i]+”\n”;
}
}
function faultHandler(event:FaultEvent):void{
Alert.show(event.fault.toString(),”WebService Error!”);
}
function resetWeather():void{
myWeatherReport.text =”";
}
]]>
</mx:Script>
<mx:WebService id=”ws” wsdl=”http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl”
showBusyCursor=”true” result=”onload(event)” fault=”faultHandler(event)”/>
<mx:VBox horizontalCenter=”center” horizontalAlign=”center”>
<mx:TextInput id=”city” text=”上海”></mx:TextInput>
<mx:Button label=”查询天气” click=”ws.getWeatherbyCityName(city.text)”/>
<mx:TextArea id=”myWeatherReport” height=”500″ width=”600″ editable=”false”/>
- </mx:VBox>
</mx:Application>
程式运行结果(实例):
沙發,收了!
呵呵,欢迎你!
不用导入什么jar包吗?
不用,Flex有自带的WebService组件。(另外Flex的库是swc格式的)^_^