zoukankan      html  css  js  c++  java
  • AS3访问WebService

    代码
    package Charlotte {
            
    import flash.events.Event;
            
    import flash.events.IOErrorEvent;
            
    import flash.net.URLLoader;
            
    import flash.net.URLLoaderDataFormat;
            
    import flash.net.URLRequest;
            
    import flash.net.URLRequestMethod;
          
            
    public class KitaWebServices{
                    
    //
                    private var url:String = new String();
                    
    private var ns:String = new String();
                    
                    
    private var soap:Namespace = new Namespace("http://schemas.xmlsoap.org/soap/envelope/");
                    
    private var soapXML:XML = <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
                
    <soap:Body/>
                
    </soap:Envelope>
                ;
                
    private var elementXML:XMLList;
                
                
    private var ready:Boolean = false;
                
    private var cache:Array = new Array();
                    
    private var shareObj:Object = new Object();
                
                    
    public function KitaWebServices(_url:String)
                    {
                            url 
    = _url;
                            analyseWSDL();
                    }
                    
                    
    private function analyseWSDL():void
                    {
                            var loader:URLLoader 
    = new URLLoader();
                            loader.dataFormat 
    = URLLoaderDataFormat.TEXT;
                            
                            var rqa:URLRequest 
    = new URLRequest();
                            rqa.url 
    = url+"?wsdl";
                            rqa.method 
    = URLRequestMethod.POST;
                            loader.addEventListener(Event.COMPLETE,analyseComlete);
                            loader.addEventListener(IOErrorEvent.IO_ERROR,errorHandler);
                            loader.load(rqa);
                    }
                    
                    
    private function errorHandler(evt:IOErrorEvent):void
                    {
                            trace(evt.type);
                    }
                    
                    
    private function analyseComlete(evt:Event):void
                    {
                            var loader:URLLoader 
    = evt.target as URLLoader;
                            
    //trace(loader.data);
                            var temp0:XML = XML(loader.data);
                            var wsdl:Namespace 
    = temp0.namespace();
                            var s:Namespace;
                            
    for (var i:uint = 0; i < temp0.namespaceDeclarations().length; i++) {
                                s 
    = temp0.namespaceDeclarations()[i]; 
                                var prefix:String 
    = s.prefix;
                                       
    if (prefix == "s") {
                                    
    //trace(s.uri);
                                    break;
                                }
                                       
    //trace(prefix + ":" , s.uri);
                            }
                            
    //运行时解除!
                            elementXML = temp0.wsdl::["types"].s::["schema"];
                            
    //trace(elementXML);
                            ns = elementXML.@targetNamespace;
                            
                            var len:uint 
    = elementXML.s::element.length();
                            var item:String 
    = new String();
                            var itemLen:uint 
    = 0;
                            var j:uint 
    = new uint();
                            
    for (i =0;i<len;i+=2)
                            {
                                    item 
    = elementXML.s::element[i].@name;
                                    shareObj[item] 
    = new Array();
                                    itemLen 
    = elementXML.s::element[i].s::complexType.s::sequence.s::element.length();
                                    
    for (j =0;j<itemLen;j++)
                                    {
                                            shareObj[item].push(elementXML.s::element[i].s::complexType.s::sequence.s::element[j].@name);
                                    }
                                    
    //trace(shareObj[item]);
                                    
    //trace(itemLen);
                                    
    //
                            }
                            ready 
    = true;
                            
    for each(var cacheLoader:WebServicesLoader in cache){
                                cacheLoader.active(ns,shareObj[cacheLoader.method]);
                        }
                        cache 
    = new Array();
                    }
                    
                    
    public function call(_method:String,_returnMethod:Function,...args:Array):void
                    {
                        var loader:WebServicesLoader  
    = new WebServicesLoader(url,soapXML,_method,_returnMethod,args);
                        
                        
    if(ready){
                                loader.active(ns,shareObj[_method]);
                        }
    else
                        {
                                cache.push(loader);
                        }
                    }
            }
    }
    import flash.events.Event;
    import flash.net.URLLoader;
    import flash.net.URLRequest;
    import flash.net.URLLoaderDataFormat;
    import flash.net.URLRequestHeader;
    import flash.net.URLRequestMethod;

    class WebServicesLoader extends URLLoader
    {
            
    private var soap:Namespace = new Namespace("http://schemas.xmlsoap.org/soap/envelope/");
            
    private var rq:URLRequest = new URLRequest();
            
    private var callBack:Function;
            
    private var url:String;
            
    private var soapXML:XML;
            
    public var method:String;
            
    private var args:Array;
            
            function WebServicesLoader(_url:String,_soapXML:XML,_method:String,_returnMethod:Function,_args:Array)
            {
                    url 
    = _url;
                    soapXML 
    = XML(_soapXML.toString());
                    method 
    = _method;
                    args 
    = _args;
                    
                    dataFormat 
    = URLLoaderDataFormat.TEXT;
                    
                    callBack 
    = _returnMethod;
            }
            function active(ns:String,argLabels:Array):
    void
            {
                    
    //trace(argLabels);
                    var methodXML :XML = XML("<"+method+" xmlns=\""+ns+"\"/>");
                    var len:uint 
    = argLabels.length;

                    
    for (var i:uint =0;i <len;i++)
                    {
                            methodXML.appendChild(XML(
    "<"+argLabels[i]+">"+args[i]+"</"+argLabels[i]+">"));
                    }
                    
                    var tempXML:XML 
    = soapXML;
                    
    //运行时解除!
                    tempXML.soap::["Body"].appendChild(methodXML);
                    
                    
                    var nns:String 
    = ns;
                    
                    
    if(nns.lastIndexOf("/")==nns.length-1){
                            nns 
    = nns.substr(0,nns.length-1);
                    }
                    
                    rq.url 
    = url+"?op="+method;                        
                    rq.method 
    = URLRequestMethod.POST;
                    rq.requestHeaders.push(
    new URLRequestHeader("Content-Type""text/xml;charset=utf-8"));
                    
                    
                    rq.requestHeaders.push(
    new URLRequestHeader("SOAPAction", nns+"/"+method));
            rq.data 
    =tempXML;
                    
                    addEventListener(Event.COMPLETE,comleteHandler);
                    load(rq);
            }
            function comleteHandler(evt:Event):
    void
            {
                    var xml:XML 
    = XML(data);
                    
    if(callBack!=null){
                            callBack.apply(
    null,new Array(xml.soap::Body.child(0).child(0)));
                    }
            }
    }

    用法:

    var kws:KitaWebServices = new KitaWebServices(url.text);
    kws.call(webservices方法名:String,回调函数:Function,...args);


     

  • 相关阅读:
    怎样去阅读一份php源代码
    Cloudera Hadoop 4系列实战课程(电商业日志流量分析项目)
    ORACLE系列之SQL从入门到精通(全面把控数据库基础)
    jQuery2.0应用开发:SSH框架整合jQuery2.0实战OA办公自动化
    Unity3D游戏引擎实战开发从入门到精通
    中国移动:物联网项目实战开发企业级应用(ssp框架应用、EXTJS4.2、GoogleMap、JPA)
    基于OpenLayers实战地理信息系统(离线地图,通过基站转经纬度,Quartz深入,轨迹实战)
    Android自动化测试从入门到精通
    博客从新开张啦!
    python scrapy版 极客学院爬虫V2
  • 原文地址:https://www.cnblogs.com/sevenyuan/p/1615372.html
Copyright © 2011-2022 走看看