Have a look at the XMLRPC specification @ http://www.xmlrpc.com/spec. There is no representation of NULL/None, thus server refuses to Marshall the 'None' value. Update your server methods to return a value other than None and that message will go away.
The other option is to set 'allow_none' to True on the Marshaller object. Doing so will turn your 'None' return values into XML-RPC '<nil/>' entities. The 'nil' type is defined as an XMLRPC extension (I'm not sure how widely adopted it is, though). See http://ontosys.com/xml-rpc/extensions.php. I'm not sure you can do that without inheriting from the dispatcher code and "rolling your own." I find it much easier to 'return True' and ignore the value. -Jeff On 9/12/07, xkenneth <[EMAIL PROTECTED]> wrote: > So i've been trying to set up a simple server and client through > XMLRPC in python. > > Here's my code: > > SERVER > > import SimpleXMLRPCServer > > > class DataServer: > def __init__(self): > pass > > def test(self,test): > self.this = test > > def show(self): > print self.this > > server = SimpleXMLRPCServer.SimpleXMLRPCServer(("localhost", 8005)) > server.register_instance(DataServer()) > server.serve_forever() > > CLIENT > import xmlrpclib > server = xmlrpclib.Server('http://localhost:8005') > server.test(5) > server.show() > > > Now, I'm getting the most odd callback from the client side: > > >>> server.show() > Traceback (most recent call last): > File "<stdin>", line 1, in ? > File "/opt/local/Library/Frameworks/Python.framework/Versions/2.4/ > lib/python2.4/xmlrpclib.py", line 1096, in __call__ > return self.__send(self.__name, args) > File "/opt/local/Library/Frameworks/Python.framework/Versions/2.4/ > lib/python2.4/xmlrpclib.py", line 1383, in __request > verbose=self.__verbose > File "/opt/local/Library/Frameworks/Python.framework/Versions/2.4/ > lib/python2.4/xmlrpclib.py", line 1147, in request > return self._parse_response(h.getfile(), sock) > File "/opt/local/Library/Frameworks/Python.framework/Versions/2.4/ > lib/python2.4/xmlrpclib.py", line 1286, in _parse_response > return u.close() > File "/opt/local/Library/Frameworks/Python.framework/Versions/2.4/ > lib/python2.4/xmlrpclib.py", line 744, in close > raise Fault(**self._stack[0]) > xmlrpclib.Fault: <Fault 1: 'exceptions.TypeError:cannot marshal None > unless allow_none is enabled'> > > What is causing this? The server recieves the data and seems to > respond properly regardless of this error, so by all means i can > always catch it, but that sounds stupid. > > Here I can verify the server process is indeed recieving the data > (calling the client with two different values): > > localhost - - [12/Sep/2007 14:35:18] "POST /RPC2 HTTP/1.0" 200 - > 5 > localhost - - [12/Sep/2007 14:35:41] "POST /RPC2 HTTP/1.0" 200 - > 10 > > Looking at the documentation: > > class SimpleXMLRPCServer( addr[, requestHandler[, > logRequests[allow_none[, encoding]]]]) > > I'm not sure how to specify the allow_none value or it's type, how can > i find out more? > > Thanks for the help! > > Regards, > Ken > > -- > http://mail.python.org/mailman/listinfo/python-list > -- http://mail.python.org/mailman/listinfo/python-list