python – SUDS生成的XML不正确
发布时间:2020-12-20 11:13:43 所属栏目:Python 来源:网络整理
导读:我正在尝试使用SUDS和 Python与SOAP Web服务进行通信.经过大量学习Python的麻烦(是的,我是新手),并研究如何使用SUDS,我遇到了一个问题. 根据肥皂泡沫,我呼吁的网络方法的签名是 (FWTCaseCreate){ClassificationEventCode = NonePriority = NoneTitle = NoneD
我正在尝试使用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[] = <empty> } ObjectDescription = None Details = None Category = None } Form = (FWTCaseForm){ FormField[] = <empty> FormName = None FormKey = None } Internal = None InteractionID = None XCoord = None YCoord = None } 所以我使用SUDS创建我想要的类并将其发送到方法.但是我收到了一个错误.所以我开启登录,我可以看到正在发送的XML不正确,导致反序列化错误. <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:ns0="http://www.CRM.com/wsdl/FLTypes" xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Header> <wsse:Security> <wsse:BinarySecurityToken>eaadf1ddff99a8</wsse:BinarySecurityToken> </wsse:Security> </SOAP-ENV:Header> <ns1:Body> <ns0:FWTCaseCreate> <ClassificationEventCode> <ClassificationEventCode>2000023</ClassificationEventCode> <Priority>1</Priority> <Title>testing</Title> <Description>testing</Description> <Queue/> <Internal>True</Internal> <XCoord>356570</XCoord> <YCoord>168708</YCoord> </ClassificationEventCode> </ns0:FWTCaseCreate> </ns1:Body> 你可以看到有一个 这是我用来拨打电话的代码 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请求中的参数序列被包装在一个与第一个参数同名的元素中.例如
.... <ns0:Body> <ns1:CreationReq> <ReqType> <ReqType>1</ReqType> <Title>Mr</Title> .... </ReqType> </ns1:CreationReq> </ns0:Body> .... 我检查了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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |