[ filmil @ 12.08.2004. 20:48 ] @
Pozdrav.

Imam naoko čudan problem sa XMLRPC-om. Posmatram dva programa: server i klijent:

server:
Code:
#! /bin/env python
 from SimpleXMLRPCServer import SimpleXMLRPCServer
 
 class OperationsTest:
     def add(self, username, password): 
         print username, password
 
 print "Start"
 server = SimpleXMLRPCServer(("localhost", 10800))
 server.register_introspection_functions()
 server.register_instance(OperationsTest())
 server.serve_forever()
 

klijent:
Code:
#! /bin/env python
 import xmlrpclib 
 
 server = xmlrpclib.ServerProxy("[url=http://localhost:10800]http://localhost:10800"[/url], allow_none=True)
 print server
 
 try:
     print server.system.listMethods()
     server.add("User", "Password")
 except xmlrpclib.Fault, v:
     print "Error: ", v
 

Pokrenem prvo server, a zatim klijenta. Iako se metod add izvrši na serveru, dobijam sledeću poruku:
Code:
$ python testclient.py
 ServerProxy for localhost:10800/RPC2
 ['add', 'delete', 'edit', 'get', 'system.listMethods', 'system.methodHelp', 'system.methodSignature']
 Error:  Fault 1: 'exceptions.TypeError:cannot marshal None unless allow_none is enabled'
 [email protected]:~/work
 $
 

Koliko vidim, dobijam jasnu poruku da None ne može da se serijalizuje osim ako to ne tražim.

Ali, gde sam ja to tražio da se serijalizuje None? Drugo, zar nisam od ServerProxy-ja tražio upravo allow_none=True? Da li je možda problem što sam metode spakovao u klasu, da li ima nešto što se implicitno (ne) prenosi?

Zahvalan na savetu,
f
[ filmil @ 12.08.2004. 21:05 ] @
Hm... ajde da sam sebi repliciram. XMLRPC izgleda zahteva da funkcija vrati bilo šta osim None. Recimo return True. Nešto se ne sećam da sam video da to piše u uputstvu.

f