【问题标题】:SOAP + Zeep + XSD extensionSOAP + Zeep + XSD 扩展
【发布时间】:2019-01-29 09:59:18
【问题描述】:

我正在通过 Zeep 与 SOAP 服务进行交互,到目前为止一切正常,除了我在处理与 XSD 扩展相关的任何内容中的传递值时遇到了障碍。

我尝试了多种方法,但我束手无策。

campaignClient = Client("https://platform.mediamind.com/Eyeblaster.MediaMind.API/V2/CampaignService.svc?wsdl")
listPaging = {"PageIndex":0,"PageSize":5}
fact=campaignClient.type_factory("ns1")
parentType = fact.CampaignIDFilter
subtype=dict(parentType.elements)["CampaignID"] = (123456,)
combined= parentType(CampaignID=subtype)

rawData  = campaignClient.service.GetCampaigns(Paging=listPaging,CampaignsFilter=combined,  ShowCampaignExtendedInfo=False,_soapheaders=token)
print(rawData)

上下文如下: 该服务用于获取项目列表,并且可以对其应用过滤器,这是一种通用类型。然后,您可以实现与该类型匹配的任何类型的过滤器,这里是 CampaignIDFilter。 我的其他尝试失败了,该服务用于查明不正确的类型等,但这种方式 - 我认为这是在纸上的声音,让我“出了点问题”。

我正在实施此处找到的解决方案:Creating XML sequences with zeep / python

这里是服务文档http://platform.mediamind.com/Eyeblaster.MediaMind.API.Doc/?v=3

干杯

【问题讨论】:

    标签: python-3.x soap zeep


    【解决方案1】:

    事实证明,实现这一目标的正确方法是稍微修改一下以获得正确的结构和类型的使用。代码本身:

    objectType = campaignClient.get_type('ns1:CampaignIDFilter')
    objectWrap = xsd.Element('CampaignServiceFilter',objectType)
    objectValue = objectWrap(CampaignID=123456)
    
    wrapperT = campaignClient.get_type('ns1:ArrayOfCampaignServiceFilter')
    wrapper = xsd.Element("CampaignsFilter",wrapperT)
    outercontent = wrapper(objectValue)
    

    这最终会生成以下 XML:

    <soap-env:Body>
       <ns0:GetCampaignsRequest xmlns:ns0="http://api.eyeblaster.com/message">
         <ns0:CampaignsFilter>
           <ns1:CampaignServiceFilter xmlns:ns1="http://api.eyeblaster.com/V1/DataContracts" xmlns:xsi="http://www.w3.org/2001/XMLSchema-
    instance" xsi:type="ns1:CampaignIDFilter">
             <ns1:CampaignID>123456</ns1:CampaignID>
           </ns1:CampaignServiceFilter>
         </ns0:CampaignsFilter>
         <ns0:Paging>
           <ns0:PageIndex>0</ns0:PageIndex>
           <ns0:PageSize>5</ns0:PageSize>
         </ns0:Paging>
         <ns0:ShowCampaignExtendedInfo>false</ns0:ShowCampaignExtendedInfo>
       </ns0:GetCampaignsRequest>
    </soap-env:Body>
    

    非常感谢这里的用户,它为我提供了让这种洛夫克拉夫特式恐怖工作所需的样板how to specify xsi:type zeep python

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    相关资源
    最近更新 更多