Uri*_*Uri 6 python xml arrays wsdl suds
环境:
我使用的WSDL(服务器)有以下架构子部分(我试图用纯文本清楚地写出来) -
[第1节]
searchRequest: (searchRequest){
userIdentification = (userIdentification){
username = ""
password = ""
}
itineraryArr = (itineraryArray){
_arrayType = ""
_offset = ""
_id = ""
_href = ""
_arrayType = ""
}
...
...
Run Code Online (Sandbox Code Playgroud)
[第2节]
itinerary: (itinerary){
departurePoint = (locationPoint){
locationId = None
radius = None
}
arrivalPoint = (locationPoint){
locationId = None
radius = None
}
...
...
Run Code Online (Sandbox Code Playgroud)
'userIdentification'没有问题(这是一种"简单"类型)
但是,'itineraryArr'是一个'行程'数组,我不知道如何使用python来创建XML数组.
例如,我尝试了几种组合
itinerary0 = self.client.factory.create('itinerary')
itineraryArray = self.client.factory.create('itineraryArray')
itineraryArray = [itinerary0]
searchRequest.itineraryArr = itineraryArray
Run Code Online (Sandbox Code Playgroud)
但我的所有试验都导致同样的服务器错误 -
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"
}
Run Code Online (Sandbox Code Playgroud)
小智 6
我在相同的情况下,使用RPC /编码样式WS和包含soap数组的方法.打印请求(在哪里request = client.factory.create('Request'))给出:
(Request){
requestid = None
option =
(ArrayOfOption){
_arrayType = ""
_offset = ""
_id = ""
_href = ""
_arrayType = ""
}
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
它的工作原理如此,因为生成的SOAP消息不显示任何arrayType属性:
<option xsi:type="ns3:ArrayOfOption">
Run Code Online (Sandbox Code Playgroud)
我找到的最佳解决方案也是最简单的:
request.option = [option1, option2, option3, option4, option5, option6]
Run Code Online (Sandbox Code Playgroud)
它以良好的SOAP消息结束:
<option xsi:type="ns0:ArrayOfOption" ns3:arrayType="ns0:Option[6]">
Run Code Online (Sandbox Code Playgroud)
正如服务器端WS所期望的那样.
小智 4
我相信您正在寻找的是:
itinerary0 = self.client.factory.create('itinerary')
itineraryArray = self.client.factory.create('itineraryArray')
print itineraryArray
itineraryArray.itinerary.append(itinerary0)
Run Code Online (Sandbox Code Playgroud)
只需要我自己做这件事;)帮助我找到它的是打印到控制台。那可能会给你以下结果:
(itineraryArray){
itinerary[] = <empty>
}
Run Code Online (Sandbox Code Playgroud)
干杯,雅克
| 归档时间: |
|
| 查看次数: |
9723 次 |
| 最近记录: |