views:

1278

answers:

3

What's the best library/package/class out there for calling SOAP web services from ActionScript 3, without using the Flex framework?

A: 

Is there a reason you don't want to use the flex libraries? From what I understand using only the components you need into your application should not cause you any performance issues.

However take a look at: http://alducente.wordpress.com/2007/10/27/web-service-in-as3-release-10/

I'm not sure if it is the best, but it has been recommended to e by one of my co-workers.

jayWellings
Thanks, the alducente stuff seems like it can work for me. A somewhat later version can be found here: http://labs.alducente.com/gophr/
Lars
A: 

Suggested reading: Advanced ActionScript 3 with Design Patterns by Joey Lott and Danny Patterson Go to chapter 15 for a better and complete solution.

My example code: private var xmlResults:XML = new URLLoader; private var urlLoader:URLLoader = new URLLoader();

public function fErrorHandler(e:IOErrorEvent):void { trace("xml failed!"); }

//when the "loader" event object finishes the loading of the xml file, run other needed functions to process the data private function fLoaderCompleteHandler(event:Event):void {

trace("xml loaded!!"); //jwt testing var result2:XML = new XML(urlLoader.data); // loads the xml file data into the xml object xmlResults = result2; //have the global xml object equal the current data loaded xml object result2 = null; // dont need current xml object any more so erase it

fParseXML(0); //process the first set of records from the xml object trace("found xml" + xmlResults.toString()); }

public function fParseXML(intAddNum:Number):void{ //create variables to store the record info // var envelope:XML = xmlResults; //XML(urlLoader.data); var soap:Namespace = envelope.namespace("soap"); var responseN:Namespace = new Namespace("http://www.domain.com/school/ServiceCollege"); var resultL:XMLList = envelope.soap::Body.responseN::HelloTestResponse.responseN::HelloTestResult;

var strTest:String; //if only one response field will be return by the web service strTest = resultL; //do something like this if multiple response feilds will be returned //strTest = resultL.response::schoolName.toString(); trace("parsing:" + strTest); trace("done loading:"); }

public function fBeginRequest():void{ var strXMLDataRequest:String var urlRequest:URLRequest = new URLRequest(); urlRequest.contentType = "text/xml; charset=utf-8"; urlRequest.method = "POST"; urlRequest.url = "http://www.domain.com/school/serviceCollege.asmx";
var soapAction:URLRequestHeader = new URLRequestHeader("SOAPAction","http://www.domain.com/school/ServiceCollege/HelloTest"); urlRequest.requestHeaders.push(soapAction); strXMLDataRequest = "<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/\"&gt;"; strXMLDataRequest = strXMLDataRequest + "<soap:Body>"; strXMLDataRequest = strXMLDataRequest + "<HelloTest xmlns=\"http://www.domain.com/school/ServiceCollege\" />"; strXMLDataRequest = strXMLDataRequest + "</soap:Body>"; strXMLDataRequest = strXMLDataRequest + "</soap:Envelope>"; urlRequest.data = new XML(strXMLDataRequest); urlLoader.load(urlRequest); urlLoader.addEventListener(IOErrorEvent.IO_ERROR, fErrorHandler); //add the event to the "loader" object urlLoader.addEventListener(Event.COMPLETE, fLoaderCompleteHandler); //add the event to the "loader" object }

Soap Request: <?xml version="1.0" encoding="utf-8"?> <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/"&gt; <soap:Body> <HelloTest xmlns="http://www.domain.com/school/ServiceCollege" /> </soap:Body> </soap:Envelope>

Soap Response: <?xml version="1.0" encoding="utf-8"?> <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/"&gt; <soap:Body> <HelloTestResponse xmlns="http://www.domain.com/school/ServiceCollege"> <HelloTestResult>string</HelloTestResult> </HelloTestResponse> </soap:Body> </soap:Envelope>

Jason
+1  A: 

Hi,

I found this post very useful. Its a good tip in general: add a swc to enable Flex classes in flash.

yn2