XML-RPC扭曲错误

问题描述

| 在http://buildbot.twistedmatrix.com/builds/sphinx-html/291-15849/projects/web/howto/xmlrpc.html上运行第一个示例时,客户端和服务器端均出现异常。我使用的服务器代码如下:
from twisted.web import xmlrpc,server

class Example(xmlrpc.XMLRPC):
    \"\"\"An example object to be published.\"\"\"

    def xmlrpc_echo(self,x):
        \"\"\"
        Return all passed args.
        \"\"\"
        return x

    def xmlrpc_add(self,a,b):
        \"\"\"
        Return sum of arguments.
        \"\"\"
        return a + b

    def xmlrpc_fault(self):
        \"\"\"
        Raise a Fault indicating that the procedure should not be used.
        \"\"\"
        raise xmlrpc.Fault(123,\"The fault procedure is faulty.\")

if __name__ == \'__main__\':
    from twisted.internet import reactor
    r = Example()
    reactor.listenTCP(7080,server.Site(r))
    reactor.run()
客户端如下:
import xmlrpclib

s = xmlrpclib.Server(\'http://localhost:7080/\')
print s.echo(\'Hello world\')
服务器端异常是:
Traceback (most recent call last):
  File \"/usr/lib/python2.6/dist-packages/twisted/web/xmlrpc.py\",line 150,in render_POST
    d.addCallback(self._cbRender,request,responseFailed)
  File \"/usr/lib/python2.6/dist-packages/twisted/internet/defer.py\",line 260,in addCallback
    callbackKeywords=kw)
  File \"/usr/lib/python2.6/dist-packages/twisted/internet/defer.py\",line 249,in addCallbacks
    self._runcallbacks()
  File \"/usr/lib/python2.6/dist-packages/twisted/internet/defer.py\",line 441,in _runcallbacks
    self.result = callback(self.result,*args,**kw)
--- <exception caught here> ---
  File \"/usr/lib/python2.6/dist-packages/twisted/web/xmlrpc.py\",line 170,in _cbRender
    allow_none=self.allowNone)
exceptions.TypeError: dumps() got an unexpected keyword argument \'allow_none\'
客户端例外是:
Traceback (most recent call last):
  File \"./client.py\",line 6,in <module>
    print s.echo(\'Hello world\')
  File \"/usr/local/lib/python2.6/dist-packages/xmlrpclib-1.0.1-py2.6.egg/xmlrpclib.py\",line 986,in __call__
    return self.__send(self.__name,args)
  File \"/usr/local/lib/python2.6/dist-packages/xmlrpclib-1.0.1-py2.6.egg/xmlrpclib.py\",line 1239,in __request
    verbose=self.__verbose
  File \"/usr/local/lib/python2.6/dist-packages/xmlrpclib-1.0.1-py2.6.egg/xmlrpclib.py\",line 1037,in request
    return self._parse_response(h.getfile(),sock)
  File \"/usr/local/lib/python2.6/dist-packages/xmlrpclib-1.0.1-py2.6.egg/xmlrpclib.py\",line 1136,in _parse_response
    p.close()
  File \"/usr/local/lib/python2.6/dist-packages/xmlrpclib-1.0.1-py2.6.egg/xmlrpclib.py\",line 508,in close
    self._parser.Parse(\"\",1) # end of data
xml.parsers.expat.ExpatError: no element found: line 1,column 0
    

解决方法

看起来您有xmlrpclib的旧版本吗? 您正在使用哪个版本的python? 您的xmlrpc服务器正在使用的xmlrpclib来自哪里,它是什么版本?
$ python -v
>>> import xmlrpclib
# /usr/lib/python2.6/xmlrpclib.pyc matches /usr/lib/python2.6/xmlrpclib.py
>>> xmlrpclib.__version__
\'1.0.1\'
>>> xmlrpclib.dumps((None,),allow_none=True)
\'<params>\\n<param>\\n<value><nil/></value></param>\\n</params>\\n
即这对我有用。也许您以某种方式正在使用旧版本的xmlrpclib?     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...