Python Zeep - 列表对象没有属性 _xsd_name

Python Zeep - List Object has no Attribute _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 端点的调用。

我不太确定从这里到哪里去。

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

根据 Zeep docs you link to,您应该调用 get_element,而不是 get_type,以构建 AnyObject

换句话说,尝试替换行

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

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