XML-RPC and None objects
Peter Funk
pf at artcom-gmbh.de
Wed Apr 12 09:39:05 EDT 2000
Hi!
XML-RPC <http://www.xmlrpc.com> is a very nice vehicle to build
distributed server/client systems. Fredrik Lundhs xmlrpc package
available at <ttp://www.pythonware.com/products/xmlrpc/> provides
everything you need to build clients and servers in Python.
But the current XML-RPC specification has a serious problem, which
was pointed out over a year ago by Skip Montanaro in the XML-RPC
discussion forum:
> Some time ago the subject of supporting discriminated null data in
> XML-RPC was brought up and apparently dropped. I just checked the
> spec and didn't see anything new. I scanned back through a couple
> pages of topics but didn't see anything there either.
> I'm busy using XML-RPC to communicate between front-end Python
> and Perl stuff (CGI scripts, modules published through
> ZopeHTTPServer or Mason components) and back-end Python stuff
> (databases). The biggest problem I've encountered when converting
> existing code to use XML-RPC is identifying and converting cases
> where I use Python's None object. I have to figure out how it's used in
> the caller and callee, then figure out a reasonable replacement. The end
> result is usually that my code isn't as clear as it used to be and that I
> wind up adding the occasional extra bug to my code (as if I don't have
> enough bugs to squash already).
> <whine> I would *really* like to see a <nil></nil> or <nil/> data type
> added to XML-RPC. </whine>
I stumbled into the same problem and since I currently use XML-RPC only
between my own server and clients I decided to ignore the official
specification and added a 'None'-handler to my version of Fredrik Lundhs
library. The needed patch is indeed very very simple: Add the following
lines to the class 'Marshaller' in 'xmlrpclib.py' you are done:
def dump_None(self, none):
self.write("<value><null></null></value>\n")
dispatch[NoneType] = dump_None
Since the class 'Unmarshaller' already returns 'None' for all unknown values
a modification there is not required. This works fine for me. YMMV.
Regards, Peter
--
Peter Funk, Oldenburger Str.86, D-27777 Ganderkesee, Germany, Fax:+49 4222950260
office: +49 421 20419-0 (ArtCom GmbH, Grazer Str.8, D-28359 Bremen)
More information about the Python-list
mailing list