python写xml多了ns0_python – SUDS生成的XML不正确
我正在尝试使用SUDS和Python与SOAP Web服务进行通信.经过大量学习Python的麻烦(是的,我是新手),并研究如何使用SUDS,我遇到了一个问题.根据肥皂泡沫,我呼吁的网络方法的签名是(FWTCaseCreate){ClassificationEventCode = NonePriority = NoneTitle = NoneDescription = NoneQueue = No
我正在尝试使用SUDS和
Python与SOAP Web服务进行通信.经过大量学习Python的麻烦(是的,我是新手),并研究如何使用SUDS,我遇到了一个问题.
根据肥皂泡沫,我呼吁的网络方法的签名是
(FWTCaseCreate){
ClassificationEventCode = None
Priority = None
Title = None
Description = None
Queue = None
DueDate = None
AssociatedObject =
(FWTObjectBriefDetails){
ObjectID =
(FWTObjectID){
ObjectType = None
ObjectReference[] =
}
ObjectDescription = None
Details = None
Category = None
}
Form =
(FWTCaseForm){
FormField[] =
FormName = None
FormKey = None
}
Internal = None
InteractionID = None
XCoord = None
YCoord = None
}
所以我使用SUDS创建我想要的类并将其发送到方法.但是我收到了一个错误.所以我开启登录,我可以看到正在发送的XML不正确,导致反序列化错误.
SOAP包如下所示
eaadf1ddff99a8
2000023
1
testingtesting
True
356570
168708
你可以看到有一个
‘ClassificationEventCode’
围绕所有其他元素的元素,这不应该存在.如果我将此xml剪切并粘贴到SOAPUI中,并首先删除此元素,然后将其直接发布到Web服务,它就能成功运行.
这是我用来拨打电话的代码
client = Client(url)
#Add a header for the security
ssnns = ('wsse', 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd')
ssn = Element('BinarySecurityToken', ns=ssnns).setText(binaryKey)
ssn1 = Element('Security',ns=ssnns)
ssn1.append(ssn)
client.set_options(soapheaders=ssn1)
newCase = client.factory.create('ns1:FWTCaseCreate')
classEventCode = client.factory.create('ns1:FWTEventCode')
classEventCode.value = 2000023
newCase.ClassificationEventCode = classEventCode
newCase.Priority = 1
#optional
newCase.AssociatedObject = None
#optional
newCase.Form = None
#optional
newCase.Internal = None
#optional
newCase.InteractionID = None
#optional
newCase.DueDate = None
#optional
newCase.Queue = None
newCase.Title = 'Title'
newCase.Description = 'description'
newCase.XCoord = '356570'
newCase.YCoord = '168708'
caseID = client.service.createCase(newCase)
有没有人有任何想法为什么会这样?我猜SUDS认为它应该基于WSDL.
谢谢.
最佳答案 我得到了完全相同的问题.我的SOAP请求中的参数序列被包装在一个与第一个参数同名的元素中.例如
....
1
Mr....
....
我检查了WSDL,以确保它没有问题.
看起来问题是因为我使用client.factory.create方法创建了一个CreationReq对象.通过打印检查客户端显示我正在调用的方法不将该对象作为参数.而是需要一个名为args的列表.
所以我的代码是:
req = client.factory.create('CreationReq')
req.ReqType = 1
req.Title = 'Mr'
resp = client.service.Create(req)
现在它是:
req = {}
req['ReqType'] = 1
req['Title'] = 'Mr'
resp = client.service.Create(**req)
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)