`
demojava
  • 浏览: 551670 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

flex WebService, AsyncToken,CallResponder用法

阅读更多
进入主题先了解下wsdl文档提供的信息,在日常开发中,不可能手工分析wsdl的文档信息,绝大多数发完Web服务的组织都会提一份文档,描述需要发送的参数和将要收到内容,还会告诉使用者可以调用那些方法在flex开发总继承web服务很简单往往需要几行代码....但无论是那种方式都要配置发送的参数和处理要返回值的方法...这就需要我们略懂一些wsdl的文档中到底定义的那些内容,已定义的方法,可参数尤其是参数在flex定义中要用的
flex WebService 使用
flex WebService AsyncToken使用

flex WebService 使用
先过一遍wsdl提供的信息:


按照上图提示一步一步向上看
wsdl的文档详细讲解参见:
http://daoexception.iteye.com/blog/510122
1.flex mxml中使用webService



1.flex ActionScript中使用webService




flex WebService AsyncToken使用
Responder () 构造函数

public function Responder(result:Function, fault:Function)

使用指定的处理函数构造 responder 的实例。

参数  result:Function — 成功完成请求时应调用的函数。 
 
fault:Function — 请求完成但出错时应调用的函数。 

使用时:token.addResponder(myResponder);

 <mx:Script>
    	<![CDATA[
			import mx.rpc.AsyncToken;
			import mx.rpc.Responder;
    		import mx.rpc.events.ResultEvent;
    		import mx.rpc.soap.LoadEvent;
    		import mx.rpc.AbstractOperation;
    		import mx.rpc.soap.WebService;
    		import mx.rpc.events.FaultEvent;
    		import mx.controls.Alert;
    		import mx.rpc.soap.WebService;
    		private var ws:WebService;
			private var responder:mx.rpc.Responder;
    		private var wsdl:String="http://localhost:8989/WebServiceDemo/services/WebServiceDemo?wsdl";
    		private function initFunc():void
    		{
    			ws=new WebService();
    			ws.wsdl = wsdl;
    			ws.requestTimeout = 300;
    			if (ws.canLoadWSDL())	{
					ws.loadWSDL();
				}
				var token:AsyncToken = ws.example(txtWord.text,null);
				var da:mx.rpc.Responder=new mx.rpc.Responder(Response_Result, Response_Fault);
					/**
				 * var da:mx.rpc.Responder=new mx.rpc.Responder 当你读到这块时会认为
				 * 	new mx.rpc.Responder 是个多余的写法 简写成 var ...=new Responder...
				 * 可是在flah.net.Responder 也有同样的类名而且是默认导入的....只能这样声明
				 * 不信可以试var da:mx.rpc.Responder=new Responder(Response_Result, Response_Fault);
				 * 当光标放在 new Responder 提示的类型却是 flash.net.Responder....
				 **/
				token.otherMessage = "myTestMethod Failed";//添加自定义属性
				token.addResponder(da);
    		}
    		private function Response_Result(e:ResultEvent):void{
				var resultStr:String;
				var otherMessage:String;
				ws.getOperation("example");//webservie有多个方法时时根据 getOperation()中的name参数获取对应的方法
				resultStr=e.token.result.toString();// token result 
				txtResult.text=resultStr;
				otherMessage=e.token.otherMessage;//获取自定义属性
				Alert.show("Web Service AsyncToken result "+otherMessage,"success");
			}
			
			private function Response_Fault(e:FaultEvent):void
    		{
    			Alert.show(e.fault.message,"Web Service  Response Error");
    		}
    	]]>
    </mx:Script>





详细参见代码:有wsdl方便测试

========wsdl中有targetNamespace的处理方式
对于wsdl中有 targetNamespace="http://service.ws.hmit.com">描述
java端处理使用org.apache.axis2的soap解析
调用时处理方法
String respXmlMessage = call(url,6000, "http://service.ws.hmit.com", "requestProcess", "xmlMessage", sendXml());
As端在webserver.load之前添加 处理带有命名空间的soap
ws.addSimpleHeader("header1", "http://service.ws.hmit.com", "foo","bar");

//关于webservice xfire 返回复杂对象

xfire支持返回List,map自定义JavaBean返回数据必须可以序列化和反序列化
如果返回的数据类型是自定义的javaBean,则需要声明webservice的数据返回类型
List和map类型不需要声明
需要返回的对象要求:、
1.必须实现Serializable,公共的构造函数
2.例如返回值是User则需要在webservice接口同目录下新建一个xml文件名称为:“接口名.aegis.xml”
<?xml version="1.0" encoding="UTF-8"?>
<mappings>
    <mapping>
        <method name="getUser">
         <return-type componentType="com.object"/>
        </method>
    </mapping>
</mappings>
例如:
ITestService
package com.jz.services;
import java.util.List;
import com.jz.beans.User;
public interface ITestService {
public List<User> getUser(String user);
}
JavaBean:
package com.jz.beans;
import java.io.Serializable;
public class User  implements Serializable{
private String name="";
public User() {
  // TODO Auto-generated constructor stub
}
public String getName() {
  return name;
}
public void setName(String name) {
  this.name = name;
}
}


如果定义的接口中方法的返回值是自定义的JavaBean则需要声明webservice服务的返回值。例如返回值是User则需要在webservice接口同目录下新建一个xml文件名称为:“接口名.aegis.xml”,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<mappings>
    <mapping>
        <method name="getUser">
         <return-type componentType="com.jz.beans.User"/>
        </method>
    </mapping>
</mappings>
1. AsyncToken
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal">
<mx:Script>
<![CDATA[
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.AsyncToken;
import mx.events.DateChooserEvent;
private function scrollHandler(event:DateChooserEvent):void {
var month:int = event.currentTarget.displayedMonth;
var monthName:String = event.currentTarget.monthNames[month];
service.url = "xml/"+monthName+".xml";
var token:AsyncToken = service.send();
token.resultHandler = onResult;
token.faultHandler = onFault;
token.month = monthName;
}
private function onResult(event:ResultEvent):void {
resultText.text = "MonthName: "+event.token.month+"\n\n";
resultText.text += "Result: "+event.result.data.month;
}
private function onFault(event:FaultEvent):void {
resultText.text = event.fault.faultString;
}
]]>
</mx:Script>
<mx:HTTPService id="service" result="event.token.resultHandler(event)"
fault="event.token.faultHandler(event)"/>
<mx:DateChooser id="dateChooser" scroll="scrollHandler(event)"/>
<mx:TextArea id="resultText" width="300" height="200"/>
</mx:Application>

2.WebService
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300">
<mx:WebService id="userRequest"
wsdl="http://localhost:8500/service/service?wsdl"
load="callService()">
<mx:operation name="getRecipes" resultFormat="object"
fault="createRecipeFault(event)"
result="createRecipeHandler(event)"/>
</mx:WebService>
<mx:Script>
<![CDATA[
import mx.rpc.events.FaultEvent;
import mx.collections.ArrayCollection;
import mx.rpc.events.ResultEvent;
import mx.controls.Alert;
private function callService():void {
userRequest.getRecipes();
}
private function createRecipeHandler(event:ResultEvent):void {
var arrayCol:ArrayCollection = event.result as ArrayCollection;
}
private function createRecipeFault(event:FaultEvent):void {
Alert.show(" error :: "+event.message);
}
]]>
</mx:Script>
</mx:Application>


flex 4 CallResponder
<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"
creationComplete="app_creationCompleteHandler(event)">
<fx:Script>
<![CDATA[
// ActionScript file
import mx.collections.ArrayCollection;
import mx.controls.Alert
import mx.events.FlexEvent;
import mx.rpc.CallResponder;
import mx.rpc.Fault;
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.rpc.soap.LoadEvent;
import mx.rpc.soap.WebService;
private const wsdl:String =
"http://localhost:8500/flex4bible/SoapService.cfc?wsdl";
[Bindable]
private var contactData:ArrayCollection;
private var service:WebService = new WebService();
private var responder:CallResponder = new CallResponder();
protected function app_creationCompleteHandler(event:FlexEvent):void
{
responder.addEventListener(ResultEvent.RESULT, resultHandler);
responder.addEventListener(FaultEvent.FAULT, faultHandler);
service.addEventListener(LoadEvent.LOAD, loadHandler);
service.loadWSDL(wsdl);
}
protected function loadHandler(event:LoadEvent):void
{
responder.token = service.getAllContacts();
}
protected function resultHandler(event:ResultEvent):void
{
contactData = event.result as ArrayCollection;
}
protected function faultHandler(event:FaultEvent):void
{
Alert.show(event.fault.faultString, event.fault.faultCode);
}
]]>
</fx:Script>
<s:layout>
<s:VerticalLayout horizontalAlign="center" paddingTop="20"/>
</s:layout>
<mx:DataGrid dataProvider="{contactData}">
<mx:columns>
<mx:DataGridColumn dataField="firstname" headerText="First Name"/>
<mx:DataGridColumn dataField="lastname" headerText="Last Name"/>
</mx:columns>
</mx:DataGrid>
</s:Application>
  • 大小: 157 KB
  • 大小: 62 KB
  • 大小: 83.1 KB
  • 大小: 152.8 KB
分享到:
评论
1 楼 gotsoft 2011-12-06  


太好了,到处找呢.

相关推荐

    Flex WebService Demo

    Flex WebService Demo是一个示例项目,它展示了如何在Adobe Flex应用程序中使用Web服务进行数据交互。Flex是一种基于ActionScript 3.0的开源框架,主要用于构建富互联网应用程序(RIA),而Web服务则允许不同应用...

    五分钟用Flex构建WebService应用

    在本教程中,“五分钟用Flex构建WebService应用”将带你快速掌握如何利用Flex与WebService进行数据交互,这对于开发动态、实时更新的Web应用至关重要。 WebService是一种基于Web的、平台无关的服务,它通过HTTP协议...

    Flex+WebService附件上传下载

    总之,Flex与WebService结合使用,能够创建高效、跨平台的文件上传和下载解决方案。理解并掌握这一技术,对于开发人员来说是非常有价值的,尤其是在构建企业级RIA应用时。通过深入学习和实践,你可以进一步提升在RIA...

    Flex webservice數據交互

    首先,`标题`中的“Flex webservice數據交互”指的是使用Flex客户端通过Web服务接口与服务器进行数据交换,这里的Web服务通常是基于SOAP协议的。SOAP(Simple Object Access Protocol)是一种轻量级、基于XML的协议...

    Flex调用Webservice及java程序

    - **通过SOAP**:在Flex中,我们可以使用`mx.rpc.soap.*`包中的类来创建SOAP客户端,如`WebService`类。首先,我们需要定义一个接口,该接口对应于Web服务的WSDL(Web服务描述语言)文档中的操作。然后,我们可以...

    spring 整合flex,整合webService

    4. **Flex客户端开发**:在Flex项目中,使用`RemoteObject`或`WebService`组件来调用后端的服务。`RemoteObject`更适用于AMF通信,而`WebService`则用于SOAP WebServices。通过这些组件,Flex可以方便地调用Spring中...

    flex webservice

    在Flex 3 beta2+XFire开发实例中,可能介绍了如何在Flex客户端与XFire服务之间建立连接,调用Web服务的方法。 7. **Flex组件和事件处理**:在调用Web服务的过程中,Flex的组件(如Form、Button等)和事件处理机制...

    Flex调用WebService访问MSSQL数据库

    在本文中,我们将深入探讨如何使用Flex调用WebService来访问MSSQL数据库。Flex是一种用于构建富互联网应用程序(RIA)的开发框架,它允许开发者创建交互性强、用户体验丰富的Web应用。而WebService则是一种通过网络...

    使用Flex调用webService开发一个天气预报服务

    在本文中,我们将深入探讨如何使用Adobe Flex调用Web Service来开发一个天气预报服务。Flex是一种基于MXML和ActionScript的开源框架,用于构建富互联网应用程序(RIA)。它允许开发者创建交互性强、用户体验良好的...

    Flex调用WebService例子(Flex工程+ XFire WebService工程)

    1. **创建WebService代理**:在Flex工程中,使用wsdl2as3工具或者直接在.mxml文件中配置WebService组件,指定WebService的WSDL(Web Services Description Language)地址。这将自动生成与服务方法对应的...

    Flex基于WebService的数据访问

    1. **创建WebService**:在.NET环境中,创建一个WebService,定义需要暴露给Flex的方法。 2. **生成WSDL**:发布服务后,生成WSDL文件,这是描述服务接口和操作的XML文档。 3. **在Flex中添加服务引用**:在Flex项目...

    Flex调用WebService进行数据查询和显示(调整)

    Flex通过使用HTTPService或WebServices类来调用基于SOAP或RESTful协议的WebService。这两种方法都能实现Flex客户端与服务器端的数据交换,但SOAP通常用于复杂的、结构化的数据交换,而RESTful则更适合简单的数据获取...

    纯flex网站前台(httpservice、webservice进行数据交互)

    4. **数据交互流程**:在Flex应用中,通常会创建一个HTTPService或WebService对象,配置其URL、方法和其他参数,然后定义一个事件监听器来处理返回的数据。当用户触发某个操作时,如点击按钮,服务会被调用,然后在...

    Flex+WebService开发实例

    1. 创建WebService连接:在Flex中,可以使用HTTPService或WebService组件来调用远程服务。HTTPService适用于RESTful API,而WebService则适用于SOAP服务。通过定义URL和方法,可以轻松地与远程服务器建立连接。 2. ...

    Flex调用Webservice实现天气预报

    在本项目“Flex调用Webservice实现天气预报”中,我们将探讨如何使用Flex作为客户端,通过调用Webservice接口来获取并显示实时的天气信息。这涉及到以下几个关键技术点: 1. **Flex中的HTTPService组件**:Flex提供...

    flex ,webservice(.net) 交互

    3. **在Flex中使用WebService**:在Flex项目中,通过Flash Builder或其他IDE,开发者可以使用WSProxy类根据WSDL文件自动生成服务代理。这一步骤将.NET Webservice的方法映射为AS3.0的函数。 4. **调用Webservice**...

    Flex+WebService登录示例

    Flex+WebService登录示例 就是我以前看过的保存下来的网页,就1分别说我骗你~

    Flex调用webService

    Flex调用WebService是一种在富互联网应用程序(RIA)中与服务器端进行交互的常见技术。Flex是Adobe开发的一个开源框架,用于构建具有动态图形和交互性的RIA。而WebService是一种基于XML的标准化方式,允许不同系统...

    Flex数据访问:WebService

    在Flex前端,我们使用WebService组件连接到这个Web服务,并指定相应的wsdl地址。当用户点击按钮时,`GetEmployee`方法被调用,发送请求到Web服务。当服务返回结果时,`onResult`事件会被触发,展示返回的员工姓名。...

    flex actionscript 调用处理 webservice的过程及方法

    在Flex中,我们可以使用`mx.rpc.soap.WebService`类来创建一个Web服务的客户端实例。在提供的代码段中,首先在`useWebService`函数中创建了一个`WebService`对象,并设置了其`wsdl`属性,这个属性指定了Web服务的...

Global site tag (gtag.js) - Google Analytics