【问题标题】:xmlrpc response datatype long possible?xmlrpc 响应数据类型可能长吗?
【发布时间】:2013-09-03 04:58:04
【问题描述】:

是否有可能允许 Python simplexmlrpc 服务器的 xmlrpc 扩展(数据类型 long int)?

客户端使用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

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

【问题讨论】:

    标签: python python-2.7 xml-rpc xmlrpclib simplexmlrpcserver


    【解决方案1】:

    以下 sn-p 中的第二行将长整数的编组更改为发出 &lt;i8&gt; 而不是 &lt;int&gt;。是的,它不太漂亮,但应该可以解决问题。

    >>> 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'
    

    【讨论】:

    • 是的,这正是我想要的。谢谢!您将在 4 小时内获得赏金 ;)
    • 完美的简单解决方案。有些客户需要"&lt;value&gt;&lt;i8&gt;%d&lt;/i8&gt;&lt;/value&gt;",有些需要"&lt;value&gt;&lt;ex:i8&gt;%d&lt;/ex:i8&gt;&lt;/value&gt;",大多数都接受。
    • 简单地使用long而不是type(0L)不是更干净吗?
    • 在我的情况下,将数字作为字符串发送而不是尝试将其作为整数发送(转换为字符串并删除后缀“L”)有效,但我想这取决于实现。只是觉得值得一试,因为它是一个更清晰的解决方案。
    • 这在我使用xmlrpclib.dumps() 时有效,但在使用xmlrpclib.ServerProxy 时仍然出现错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 2011-11-29
    • 2017-12-28
    相关资源
    最近更新 更多