XmlRpc for AS 3.0 HOWTO
Since people ask (in emails, at the short-lived MT version of this blog and on flexcoders@yahoo), here is how I use it. (DISCLAIMER: as I've mentioned, I hacked this from the original when I was just starting with Flex 2, so I gutted some code before I knew what the hell I was doing, but in this state it works for me...)
I use Flex Builder. I have the contents of the zip file right in my Flex Builder project. (NOTE: This was before I read thatflex
should
not be a part of a package name per Adobe's license; change it, willya?)
Then I choose have a simple facade like so:
package com.qbf.flex.ct { // Insert correct imports here, of course... public class Utils { public static function serverCall(method:String, params:Array, handler:Function): void { SERVER_CALL.call(method, params, handler, DisplayObject(Application.application)); } public static const SERVER_CALL:XmlRpcService = new XmlRpcService("http://localhost:8081/", Application.application.url.indexOf("http://") == 0? null : null : // This is explained further below... QbfFakeResponse.SINGLETON); }And from everywhere else in the code I use
Utils.serverCall()
as
follows:
var params:Array = [{value : resdefDataToServer, type: "struct"}, uri, server]; Utils.serverCall("doStuff", params, // This callback will be executed when the server // call returns function(result:Object):void { process(result); });Notice that you only need to specify types for parameters if it's not a string. If all your parameters are string, you can just pass an array of their values to the
serverCall()
--
a little sugar...
Now about this QbfFakeResponse.SINGLETON
business (it's not
necessary, just use null
in its place if you don't
need it). The definition of
SERVER_CALL
checks whether the application URL starts with
http://
-- in my case, it means that it's running "for real". If it is
running in Flex Builder's debugger, the URL will start with file://
,
and so I will use "fake" responses to simulate server calls (this is sometimes
useful for debugging, so that I don't have to run a server). This fake
response class is an implementation of com.qbf.flex.util.xmlrpc.FakeResponse
interface. All you need
to do is implement getResponse()
method and return
whatever you need by checking the method name and parameters provided.