首页 > 解决方案 > Python Zeep - 列表对象没有属性_xsd_name

问题描述

我正在尝试使用 Zeep 库调用 SOAP 端点。

端点具有以下签名:

ExecuteStaticSQLQuery(queryType: ns0:StaticQueries, xmlParameters: {_value_1: ANY}, iRowsAffected: xsd:int) -> ExecuteStaticSQLQueryResult: xsd:int, iRowsAffected: xsd:int

我构建了一个包含以下逻辑的函数:

INSERT_AUTO_FORWARD_IMPORT = 'INSERT_AUTO_FORWARD_IMPORT_1'

query_parameter = self.client.get_type('ns0:QueryParameter')
db_type = self.client.get_type('ns0:DbType')

table_parameter = query_parameter(ParameterType=db_type('String'), 
                                  ParameterName='@Auto_Forward_Table_Name', 
                                  ParameterValue=auto_forward_table)

any_object = AnyObject(query_parameter, table_parameter)
xml_parameters = {
     '_value_1': any_object
}

soap_envelope = self.service.ExecuteStaticSQLQuery(queryType=INSERT_AUTO_FORWARD_IMPORT, 
                                                   xmlParameters=xml_parameters, 
                                                   iRowsAffected=rows_affected)

当我调用该函数时,出现以下错误:

'list' object has no attribute '_xsd_name'

我怀疑问题出在any_object我构建的版本上,因为我可以在没有参数的情况下向端点发送请求,xmlParameters并得到回复。

基于Zeep Any Objects Docs,我认为我正确地构建AnyObject并实现了对 SOAP 端点的调用。

我真的不知道从这里去哪里。

标签: pythonpython-3.xzeep

解决方案


我不确定您是否正确创建了AnyObject.

根据您链接到的 Zeep 文档,您应该调用get_element而不是get_type构造AnyObject.

换句话说,尝试替换该行

query_parameter = self.client.get_type('ns0:QueryParameter')

query_parameter = self.client.get_element('ns0:QueryParameter')

推荐阅读