参考网站:http://efreedom.com/Question/1-5769128/Soap-Client-Using-Suds
suds 在进行webservice 调用的时候,简单的webservice模式,通过string,int,boolean 可以实现简单的参数传递
但进行复杂参数传递的时候需要用到suds的工厂化处理方式来处理未能识别或者复杂的数据结构
下面介绍两种方式:
1 only one 复杂模式
ArrayOfIntType/ArrayOfStringType
from suds.client import Client
c = Client(url)
#int 形array
ArrayOfIntType = c.factory.create('ArrayOfIntType')
ArrayOfIntType.int = [1,2,3,4,5,6,7] #int形array数组
#string形array
ArrayOfStringType = c.factory.create('ArrayOfStringType')
ArrayOfStringType.string = [‘www’,'dddd','eeeee'] #string形array数组
2 ArrayOfArrayOfIntType/ArrayOfArrayOfStringType 这种多重模式array形式的时候
from suds.client import Client
c = Client(url)
#int 复合形数组
ArrayOfArrayOfIntType = self.client.factory.create('ArrayOfArrayOfIntType')
ArrayOfArrayOfIntType.ArrayOfIntType = []
for L in [[1,2], [5,6]]:
ArrayOfIntType = c.factory.create('ArrayOfIntType') #定义子类型
ArrayOfIntType.int = L
ArrayOfArrayOfIntType.append(ArrayOfIntType) #将子类型增加到上层类型
#string 复合数组
ArrayOfArrayOfStringType = self.client.factory.create('ArrayOfArrayOfStringType')
ArrayOfArrayOfStringType.ArrayOfStringType = []
for S in [['1','2'], ['5','6']]:
ArrayOfStringType = c.factory.create('ArrayOfStringType') #定义子类型
ArrayOfStringType.string = S
ArrayOfArrayOfStringType.append(ArrayOfStringType) #将子类型增加到上层类型
以上资料参考网站:http://efreedom.com/Question/1-5769128/Soap-Client-Using-Suds
http://stackoverflow.com/questions/2418172/soap-python-suds#
3 python输出最后请求的webservce xml格式方式 或 获取最后xml格式的方式
#输出最后数据
result=c.last_sent()
#输出最后接受的数据
result=c.last_received()
4 打印webserice 的结构可以使用简单的print
print c
显示的结构格式如下:
Suds - version: 0.4.4 build: (beta) R397-20081121
Service (WebServiceTestBeanService) tns="http://test.server.enterprise.rhq.org/"
Prefixes (1):
ns0 = "http://test.server.enterprise.rhq.org/"
Ports (1):
(Soap)
Methods:
addPerson(Person person, )
echo(xs:string arg0, )
getList(xs:string str, xs:int length, )
getPercentBodyFat(xs:string name, xs:int height, xs:int weight)
getPersonByName(Name name, )
hello()
testExceptions()
testListArg(xs:string[] list, )
testVoid()
updatePerson(AnotherPerson person, name name, )
Types (23):
Person
Name
Phone
AnotherPerson