zeep 中的类型错误当响应中返回两个选择元素时

问题描述

我正在尝试在 python 中调用“Get_Purchase_Orders”操作,当收到响应时它抛出以下错误

TypeError error in Get_Purchase_Orders : {urn:com.workday/bsvc}Bill_To_Address_ReferenceType() got an unexpected keyword argument 'Address_Reference'. Signature: `({Bill_To_Address_Reference: {urn:com.workday/bsvc}Unique_IdentifierObjectType} | {Address_Reference: {urn:com.workday/bsvc}Address_ReferenceType[]}) Unexpected error:  <class 'TypeError'>

WSDL 文件可访问 here

我的发现:

Bill_To_Address_Data 有两个相互排斥的元素(Bill_To_Address_ReferenceAddress_Reference),这意味着只需要两个元素中的一个Bill_To_Address_Reference {{ 1}} 和两个标签都来响应)。可以看到示例 XML here

xml chunk 也可以在下面看到

Address_Reference

下面是上面xml的xsd块

<bsvc:Bill_To_Address_Data>
 <!-- You have a CHOICE of the next 2 items at this level -->
 <!-- Optional: -->
 <bsvc:Bill_To_Address_Reference bsvc:Descriptor="string">
    <!-- Zero or more repetitions: -->
    <bsvc:ID bsvc:type="string">string</bsvc:ID>
 </bsvc:Bill_To_Address_Reference>
 <!-- Zero or more repetitions: -->
 <bsvc:Address_Reference>
    <!-- Optional: -->
    <bsvc:ID>string</bsvc:ID>
 </bsvc:Address_Reference>
</bsvc:Bill_To_Address_Data>

在针对 WSDL 中的 XSD 验证 XML 或可以访问时,我在氧气中确认了这一点here

现在我想要的是忽略这个错误并使用 zeep 解析 python 中的响应。 任何帮助将不胜感激。

解决方法

您的选择是:

  1. 修改 WSDL(XML 架构部分),以便在同一请求中允许两个标签
  2. 在 Zeep 中找到允许您关闭 XSD 验证的设置
  3. 停止使用 Zeep,寻找另一个工具,让您无需验证 WSDL 即可解析请求

选项 1 是最好的,因为 WSDL 应该是服务与其调用者之间的契约。如果不验证,那么使用 WSDL 的价值就会大大降低。