【问题标题】:Python suds error creating objectPython suds 错误创建对象
【发布时间】:2012-07-18 00:33:15
【问题描述】:

尝试使用 echosign SOAP API。

wsdl 在这里:https://secure.echosign.com/services/EchoSignDocumentService14?wsdl

当我尝试创建某些对象时,它似乎无法找到类型,即使在 print client 中列出它之后也是如此

import suds

url = "https://secure.echosign.com/services/EchoSignDocumentService14?wsdl"

client = suds.client.Client(url)
print client


  Service ( EchoSignDocumentService14 ) tns="http://api.echosign"
     Prefixes (10)
        ns0 = "http://api.echosign"
        ns1 = "http://dto.api.echosign"
        ns2 = "http://dto10.api.echosign"
        ns3 = "http://dto11.api.echosign"
        ns4 = "http://dto12.api.echosign"
        ns5 = "http://dto13.api.echosign"
        ns15 = "http://dto14.api.echosign"
        ns16 = "http://dto7.api.echosign"
        ns17 = "http://dto8.api.echosign"
        ns18 = "http://dto9.api.echosign"
     Ports (1):
        (EchoSignDocumentService14HttpPort)
           Methods (45):
                 ...
           Types (146):
              ns1:CallbackInfo
              ns17:WidgetCreationInfo

为简洁起见,但显示了命名空间和我现在关心的 2 种类型。

尝试运行WCI = client.factory.create("ns17:WidgetCreationInfo") 会产生此错误:

client.factory.create("ns17:WidgetCreationInfo") 回溯(最近一次通话最后): 文件“”,第 1 行,在 文件“build/bdist.macosx-10.7-intel/egg/suds/client.py”,第 244 行,在创建中 suds.BuildError: 构建 (ns17:WidgetCreationInfo) 的实例时发生错误。因此 无法构造您请求的对象。推荐 您使用 Suds 对象手动构造类型。 请打开一张带有此错误描述的工单。 原因:找不到类型:'(CallbackInfo, http://dto.api.echosign, )'

所以它似乎无法找到 CallbackInfo 类型。也许是因为它缺少那里的ns?

【问题讨论】:

    标签: python soap suds


    【解决方案1】:

    再次,在此处发布 15 分钟后想通了。

    suds 可以选择交叉授粉所有命名空间,以便它们都导入彼此的架构。 autoblend 可以在构造函数中设置,也可以使用set_options 方法设置。

    suds.client.Client(url, autoblend=True)
    

    【讨论】:

    • 这只是救了我!虽然我在实际尝试创建嵌入式小部件时不断收到 errorCode = "EXCEPTION" 。它对你有用吗?
    • 是的。他们并没有在他们的 errorMessage 中提供太多信息,不是吗?我明白了,直到我完全正确地格式化了请求。这是一个工作示例(我尝试了 url 并传递了被注释掉的编码文件,两者都有效)gist.github.com/3140960
    • 另外,您可能不必明确None 出所有这些属性,但我相信您会这样做。
    • 哇,谢谢!那成功了。我正在设置 fileInfos = [fileInfo] 而不是创建 ArrayOfFileInfo
    • 一开始我也做了同样的事情。 :) 他们没有最优雅的 API。我的意思是……肥皂? 2012 年的家伙。
    【解决方案2】:

    看一下 WSDL,在 http://*.api.echosign 中似乎有很多 suds 无法获取的定义。

    要么更新您的 /etc/hosts 以使这些格式不正确的域可以访问,要么将 wsdl 保存在本地,修改它,然后使用 Client('file://...', ...) 来创建您的 suds 客户端。

    【讨论】:

    • 我相信它可以很好地获取它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    相关资源
    最近更新 更多