[s-xml-rpc-devel] Defining remote functions

Frédéric Brunel frederic.brunel at free.fr
Thu Jun 17 18:20:51 UTC 2004


Hi,

By googling the Web for an XML-RPC implementation in Common Lisp, I 
found S-XML-RPC and other one for Corman Lisp.  I'm glad that S-XML-RPC 
is now part of Common-Lisp.net.

By the way, looking at the Corman Lisp API for XML-RPC, I found 
interesting that it have the ability to define a standard function 
embedding an XML-RPC call.  How about implementing this kind of thing 
in S-XML-RPC?  I wrote the following lines of code:

(defmacro define-xmlrpc-method (name args &key url method)
   `(defun ,name ,args
      (xml-rpc-call (encode-xml-rpc-call ,method , at args)
        :url ,(puri:uri-path url)
        :host ,(puri:uri-host url)
        :port ,(cond ((puri:uri-port url)) (t 80)))))

(define-xmlrpc-method get-state-name (state)
   :url #u"http://betty.userland.com/RPC2"
   :method "examples.getStateName")

(define-xmlrpc-method get-time ()
   :url #u"http://time.xmlrpc.com/RPC2"
   :method "currentTime.getCurrentTime")

? (get-state-name 41)
"South Dakota"

? (get-time)
#<XML-RPC-TIME 20040617T10:47:31>

I rely on the great PURI package to parse URL.  Quite straightforward.  
Of course, we should also wrap and unwrap some type convertions not to 
see anything about the XML-RPC types.  I guess the function should also 
accept HASHTABLEs to be converted in XML-RPC structs.

What do you think?

-- 
Frederic Brunel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: PGP.sig
Type: application/pgp-signature
Size: 155 bytes
Desc: Ceci est une signature ?lectronique PGP
URL: <https://mailman.common-lisp.net/pipermail/s-xml-rpc-devel/attachments/20040617/e99b6dfc/attachment.sig>


More information about the S-xml-rpc-devel mailing list