使用zeep时,以下代码:
string_type = client.get_type("xsd:string")
string_expression = string_type("my string value")
结果:
<ns1:Value>my string value</ns1:Value>
SOAP服务器上的序列化程序实际上是这样的:
<ns1:Value xsi:type="b:string" xmlns:b="http://www.w3.org/2001/XMLSchema">my string value</ns1:Value>
这种差异会导致SOAP服务器抛出异常:
zeep.exceptions.Fault:格式化程序在尝试时引发了异常 反序列化消息:尝试执行以下操作时出错 反序列化参数http://Services.IPWS/。的 InnerException消息为“来自命名空间的元素值 http://schemas.datacontract.org/ 不能将子内容反序列化为对象。请用 XmlNode []反序列化这种XML模式。请参阅 InnerException,以获取更多详细信息。
如何使zeep保留类型声明在XML标记中?
答案 0 :(得分:0)
我已经找到一种使zeep生成以下标记的方法,这是SOAP服务器期望的:
value = zeep.xsd.AnyObject(zeep.xsd.String(), "my string value")
结果是:
<ns1:Value xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:string">my string value</ns1:Value>