首先,安装部署axis不再提及;
第一步:编写web Service代码:
- package org.corey.service;
- public class CoreyService {
- public String getResult(Info info) {
- if (info.getAge() > 22 && info.getName().length() > 3) {
- return "validate";
- }
- return "invalidate";
- }
- }
- package org.corey.service;
- public class Info {
- private String name;
- private int age;
- public Info() {
- super();
- // TODO Auto-generated constructor stub
- }
- public Info(String name, int age) {
- super();
- this.name = name;
- this.age = age;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- }
很简单的一个web service,但是,特别的是,他的数据类型不是基本数据类型,而是自定义的数据对象;
我们看下在flex下面如何调用;
Flex main:
- <?xml version="1.0" encoding="GB2312"?>
- <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="13">
- <mx:Script>
- <![CDATA[
- import mx.rpc.soap.WebService;
- import org.corey.service.CoreyResponder;
- import mx.rpc.AsyncToken;
- import org.corey.service.Info1;
- import mx.rpc.AbstractService;
- import mx.rpc.events.ResultEvent; //引用ResultEvent类
- import mx.controls.Alert; //引用Alert类
- private function sendService():void{
- var ws:WebService=new WebService();
- var wsdl:String="http://127.0.0.1:8888/axis2/services/CoreyService?wsdl";
- ws.wsdl=wsdl;
- ws.loadWSDL();
- var service:AbstractService=ws;
- var info1:Info1=new Info1();
- info1.age=23;
- info1.name="corey";
- var token:AsyncToken=AsyncToken(service.getResult(info1));
- token.addResponder(new CoreyResponder(handle));
- }
- private function handle(event:ResultEvent):void
- {
- show.text=event.result as String;
- }
- ]]>
- </mx:Script>
- <mx:Text id="show" text="hello 2 world"/>
- <mx:Button id="btn" label="send service" click="sendService()" x="0" y="30"/>
- </mx:Application>
- package org.corey.service
- {
- import mx.rpc.IResponder;
- public class CoreyResponder implements IResponder
- {
- private var handle:Function;
- public function CoreyResponder(handle:Function)
- {
- this.handle=handle;
- }
- public function result(data:Object):void
- {
- handle(data);
- }
- public function fault(info:Object):void
- {
- }
- }
- }
- package org.corey.service
- {
- public class Info1
- {
- public var name:String;
- public var age:int;
- }
- }
可见类名不一定要相同,只要其中的定义的字段名字相同即可;
我们都知道web service是和语言和平台无关的,他基于soap协议,采用xml格式进行同意的数据传输,我们再来看一下假如web service返回一个自定义的java对象,我们应该如何操作;
CoreyService修改成为:
- package org.corey.service;
- public class CoreyService {
- public ResultInfo getResult(Info info) {
- if (info.getAge() > 22 && info.getName().length() > 3) {
- return new ResultInfo("cc", 21);
- }
- return new ResultInfo("bb", 11);
- }
- }
ResultInfo:
- package org.corey.service;
- public class ResultInfo {
- private String name;
- private int age;
- public ResultInfo() {
- super();
- // TODO Auto-generated constructor stub
- }
- public ResultInfo(String name, int age) {
- super();
- this.name = name;
- this.age = age;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getAge() {
- return age;
- }
- public void setAge(int age) {
- this.age = age;
- }
- }
我们的flex mxml如下:
- <?xml version="1.0" encoding="GB2312"?>
- <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="13">
- <mx:Script>
- <![CDATA[
- import mx.rpc.soap.WebService;
- import org.corey.service.CoreyResponder;
- import mx.rpc.AsyncToken;
- import org.corey.service.Info1;
- import mx.rpc.AbstractService;
- import mx.rpc.events.ResultEvent; //引用ResultEvent类
- import mx.controls.Alert; //引用Alert类
- private function sendService():void{
- var ws:WebService=new WebService();
- var wsdl:String="http://127.0.0.1:8888/axis2/services/ResultService?wsdl";
- ws.wsdl=wsdl;
- ws.loadWSDL();
- var service:AbstractService=ws;
- var info1:Info1=new Info1();
- info1.age=23;
- info1.name="corey";
- var token:AsyncToken=AsyncToken(service.getResult(info1));
- token.addResponder(new CoreyResponder(handle));
- }
- private function handle(event:ResultEvent):void
- {
- var obj:Object=event.result as Object;
- show.text=obj.name+":"+obj.age;
- }
- ]]>
- </mx:Script>
- <mx:Text id="show" text="hello world"/>
- <mx:Button id="btn" label="send service" click="sendService()" x="0" y="30"/>
- </mx:Application>
还原成为了Object对象;而不能自己定义一个ResultInfo!