[英]How to create arrayType for WSDL in Python (using suds)?
环境:
我使用的WSDL(服务器)有以下架构子部分(我试图用纯文本清楚地写出来) -
[第1节]
searchRequest: (searchRequest){
userIdentification = (userIdentification){
username = ""
password = ""
}
itineraryArr = (itineraryArray){
_arrayType = ""
_offset = ""
_id = ""
_href = ""
_arrayType = ""
}
...
...
[第2节]
itinerary: (itinerary){
departurePoint = (locationPoint){
locationId = None
radius = None
}
arrivalPoint = (locationPoint){
locationId = None
radius = None
}
...
...
'userIdentification'没有问题(这是一种“简单”类型)
但是,'itineraryArr'是一个'行程'数组,我不知道如何使用python来创建XML数组。
例如,我尝试了几种组合
itinerary0 = self.client.factory.create('itinerary')
itineraryArray = self.client.factory.create('itineraryArray')
itineraryArray = [itinerary0]
searchRequest.itineraryArr = itineraryArray
但我的所有试验都导致同样的服务器错误 -
Server raised fault: 'Cannot use object of type itinerary as array'
(Fault){
faultcode = "SOAP-ENV:Server"
faultstring = "Cannot use object of type itinerary as array"
}
我在相同的情况下,使用RPC /编码样式WS和包含soap数组的方法。 打印请求(其中request = client.factory.create('Request')
)给出:
(Request){
requestid = None
option =
(ArrayOfOption){
_arrayType = ""
_offset = ""
_id = ""
_href = ""
_arrayType = ""
}
}
Jacques(1request.option.append(option1)1)给出的解决方案不起作用,因为它以错误消息结束ArrayOfOption instance has no attribute append
。
mcauth给出的解决方案如下所示:
array = client.factory.create('ArrayOfOption')
array.item = [option1, option2, option3, option4, option5, option6]
request.option=array
它的工作原理如此,因为生成的SOAP消息不显示arrayType
属性:
<option xsi:type="ns3:ArrayOfOption">
我找到的最佳解决方案也是最简单的:
request.option = [option1, option2, option3, option4, option5, option6]
它以良好的SOAP消息结束:
<option xsi:type="ns0:ArrayOfOption" ns3:arrayType="ns0:Option[6]">
正如服务器端WS所期望的那样。
我相信你要找的是:
itinerary0 = self.client.factory.create('itinerary')
itineraryArray = self.client.factory.create('itineraryArray')
print itineraryArray
itineraryArray.itinerary.append(itinerary0)
只是必须自己这样做;)什么帮助我发现它是打印到控制台。 那可能会给你以下几点:
(itineraryArray){
itinerary[] = <empty>
}
欢呼声中,雅克·
对于这种类型的结构,我在数组对象上设置一个名为“item”的属性,然后将列表成员附加到它。 就像是:
itineraryArray = self.client.factory.create('itineraryArray')
itineraryArray.item = [itinerary0]
即使对于具有多个级别的复杂调用,也可以解析和传递。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.