2013-08-30 90 views
4

有没有可能为Python simplexmlrpc服务器允许xmlrpc扩展(数据类型long int)?xmlrpc响应datatype long可能吗?

客户端使用Apache xmlrpc,其中allows 8 byte integers

基本上,我使用的是example code使用此功能来测试它:

def FcnRLong(): 
    x=8000000000L 
    return x 

导致这个错误:

Java exception occurred: 
org.apache.xmlrpc.XmlRpcException: <type 'exceptions.OverflowError'>:long int exceeds XML-RPC limits 

任何想法?是否有Python 2.7的xmlrpc服务器支持long int

回答

9

以下代码片段中的第二行更改对长整数的编组,以发出<i8>而不是<int>。是的,这不太漂亮,但应该解决问题。

>>> import xmlrpclib 
>>> xmlrpclib.Marshaller.dispatch[type(0L)] = lambda _, v, w: w("<value><i8>%d</i8></value>" % v) 
>>> xmlrpclib.dumps((2**63-1,)) 
'<params>\n<param>\n<value><i8>9223372036854775807</i8></value></param>\n</params>\n' 
+0

是的,这正是我一直在寻找的。谢谢!您将在4小时内获得赏金;) – nijansen

+0

完美的简单解决方案。某些客户需要''%d“',一些''%d“',大多数都接受。 – Daniel

+1

简单地使用'long'而不是'type(0L)'是否更简洁? – saeedgnu