现在的位置: 首页 > 综合 > 正文

Flex WebService 和 Axis2全过程

2018年03月29日 ⁄ 综合 ⁄ 共 5273字 ⁄ 字号 评论关闭
首先,安装部署axis不再提及;

第一步:编写web Service代码:

  1. package org.corey.service;
  2. public class CoreyService {
  3.     public String getResult(Info info) {
  4.         if (info.getAge() > 22 && info.getName().length() > 3) {
  5.             return "validate";
  6.         }
  7.         return "invalidate";
  8.     }
  9. }
  1. package org.corey.service;
  2. public class Info {
  3.     private String name;
  4.     private int age;
  5.     public Info() {
  6.         super();
  7.         // TODO Auto-generated constructor stub
  8.     }
  9.     public Info(String name, int age) {
  10.         super();
  11.         this.name = name;
  12.         this.age = age;
  13.     }
  14.     public String getName() {
  15.         return name;
  16.     }
  17.     public void setName(String name) {
  18.         this.name = name;
  19.     }
  20.     public int getAge() {
  21.         return age;
  22.     }
  23.     public void setAge(int age) {
  24.         this.age = age;
  25.     }
  26. }

很简单的一个web service,但是,特别的是,他的数据类型不是基本数据类型,而是自定义的数据对象;
我们看下在flex下面如何调用;

Flex main:

  1. <?xml version="1.0" encoding="GB2312"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="13">
  3.     <mx:Script>
  4.         <![CDATA[
  5.             import mx.rpc.soap.WebService;
  6.             
  7.             import org.corey.service.CoreyResponder;
  8.             import mx.rpc.AsyncToken;
  9.             import org.corey.service.Info1;
  10.             import mx.rpc.AbstractService;
  11.             import mx.rpc.events.ResultEvent;           //引用ResultEvent类
  12.             import mx.controls.Alert;                   //引用Alert类
  13.             private function sendService():void{
  14.                 var ws:WebService=new WebService();
  15.                 var wsdl:String="http://127.0.0.1:8888/axis2/services/CoreyService?wsdl";
  16.                 ws.wsdl=wsdl;
  17.                 ws.loadWSDL();
  18.                 var service:AbstractService=ws;
  19.                 var info1:Info1=new Info1();
  20.                 info1.age=23;
  21.                 info1.name="corey";
  22.                 var token:AsyncToken=AsyncToken(service.getResult(info1));
  23.                 token.addResponder(new CoreyResponder(handle));
  24.             }
  25.             
  26.             private function handle(event:ResultEvent):void
  27.             {
  28.                 show.text=event.result as String;
  29.             }
  30.         ]]>
  31.     </mx:Script>
  32.     <mx:Text id="show" text="hello         2     world"/>
  33.     <mx:Button id="btn" label="send service" click="sendService()" x="0" y="30"/>
  34. </mx:Application>
  1. package org.corey.service
  2. {
  3.     import mx.rpc.IResponder;
  4.     public class CoreyResponder implements IResponder
  5.     {   
  6.         private var handle:Function;
  7.         public function CoreyResponder(handle:Function)
  8.         {
  9.             this.handle=handle;
  10.         }
  11.         public function result(data:Object):void
  12.         {
  13.             handle(data);
  14.         }
  15.         
  16.         
  17.         public function fault(info:Object):void
  18.         {
  19.             
  20.         }
  21.         
  22.     }
  23. }
  1. package org.corey.service
  2. {
  3.     public class Info1
  4.     {
  5.       public var name:String;
  6.       public var age:int;
  7.     }
  8. }

可见类名不一定要相同,只要其中的定义的字段名字相同即可;
我们都知道web service是和语言和平台无关的,他基于soap协议,采用xml格式进行同意的数据传输,我们再来看一下假如web service返回一个自定义的java对象,我们应该如何操作;

CoreyService修改成为:

  1. package org.corey.service;
  2. public class CoreyService {
  3.     public ResultInfo getResult(Info info) {
  4.         if (info.getAge() > 22 && info.getName().length() > 3) {
  5.             return new ResultInfo("cc", 21);
  6.         }
  7.         return new ResultInfo("bb", 11);
  8.     }
  9. }

ResultInfo:

  1. package org.corey.service;
  2. public class ResultInfo {
  3.     private String name;
  4.     private int age;
  5.     public ResultInfo() {
  6.         super();
  7.         // TODO Auto-generated constructor stub
  8.     }
  9.     public ResultInfo(String name, int age) {
  10.         super();
  11.         this.name = name;
  12.         this.age = age;
  13.     }
  14.     public String getName() {
  15.         return name;
  16.     }
  17.     public void setName(String name) {
  18.         this.name = name;
  19.     }
  20.     public int getAge() {
  21.         return age;
  22.     }
  23.     public void setAge(int age) {
  24.         this.age = age;
  25.     }
  26. }

我们的flex mxml如下:

  1. <?xml version="1.0" encoding="GB2312"?>
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" fontSize="13">
  3.     <mx:Script>
  4.         <![CDATA[
  5.             import mx.rpc.soap.WebService;
  6.             
  7.             import org.corey.service.CoreyResponder;
  8.             import mx.rpc.AsyncToken;
  9.             import org.corey.service.Info1;
  10.             import mx.rpc.AbstractService;
  11.             import mx.rpc.events.ResultEvent;           //引用ResultEvent类
  12.             import mx.controls.Alert;                   //引用Alert类
  13.             private function sendService():void{
  14.                 var ws:WebService=new WebService();
  15.                 var wsdl:String="http://127.0.0.1:8888/axis2/services/ResultService?wsdl";
  16.                 ws.wsdl=wsdl;
  17.                 ws.loadWSDL();
  18.                 var service:AbstractService=ws;
  19.                 var info1:Info1=new Info1();
  20.                 info1.age=23;
  21.                 info1.name="corey";
  22.                 var token:AsyncToken=AsyncToken(service.getResult(info1));
  23.                 token.addResponder(new CoreyResponder(handle));
  24.             }
  25.             
  26.             private function handle(event:ResultEvent):void
  27.             {
  28.                 var obj:Object=event.result as Object;
  29.                 show.text=obj.name+":"+obj.age;
  30.             }
  31.         ]]>
  32.     </mx:Script>
  33.     <mx:Text id="show" text="hello world"/>
  34.     <mx:Button id="btn" label="send service" click="sendService()" x="0" y="30"/>
  35. </mx:Application>

还原成为了Object对象;而不能自己定义一个ResultInfo!

抱歉!评论已关闭.