Заставьте zeep использовать пространство имен по умолчанию вместо именованного пространства имен в некоторых случаях - PullRequest
0 голосов
/ 07 мая 2019

Я использую Zeep для отправки запросов к API-интерфейсу SOAP 1.1, предоставленному поставщиком, API построен на WCF, но, похоже, имеет некоторые специфические особенности.

Zeep в настоящее время генерирует XML, как этот

  <soap-env:Body>
    <ns0:GetDataServers xmlns:ns0="AIR.Services.DataSourceManagementService.Api">
      <ns0:request>
        <ns1:BusinessUnitSid xmlns:ns1="AIR.Services.Common.Api">1</ns1:BusinessUnitSid>
        <ns2:LicenseUid xmlns:ns2="AIR.Services.Common.Api">00000000-0000-0000-0000-000000000000</ns2:LicenseUid>
        <ns3:RequestUid xmlns:ns3="AIR.Services.Common.Api">00000000-0000-0000-0000-000000000000</ns3:RequestUid>
        <ns4:SqlInstanceSid xmlns:ns4="AIR.Services.Common.Api">1</ns4:SqlInstanceSid>
      </ns0:request>
    </ns0:GetDataServers>
  </soap-env:Body>

Однако это отклонено с ошибкой Error in line 1 position 74. Expecting element 'GetDataServersRequest' from namespace 'AIR.Services.DataSourceManagement.Api'.. Encountered 'Element' with name 'GetDataServersRequest', namespace ''.

Но если я сделаю ns0 пространством имен по умолчанию, оно будет работать

<soap-env:Body>
    <GetDataServers xmlns="AIR.Services.DataSourceManagementService.Api">
      <request>
        <ns1:BusinessUnitSid xmlns:ns1="AIR.Services.Common.Api">1</ns1:BusinessUnitSid>
        <ns2:LicenseUid xmlns:ns2="AIR.Services.Common.Api">00000000-0000-0000-0000-000000000000</ns2:LicenseUid>
        <ns3:RequestUid xmlns:ns3="AIR.Services.Common.Api">00000000-0000-0000-0000-000000000000</ns3:RequestUid>
        <ns4:SqlInstanceSid xmlns:ns4="AIR.Services.Common.Api">1</ns4:SqlInstanceSid>
      </request>
    </GetDataServers>
  </soap-env:Body>

Есть ли способ заставить Zeep использовать простое пространство имен xmlns по умолчанию в этой позиции?

1 Ответ

0 голосов
/ 16 мая 2019

Вы можете достичь этого с

client.set_ns_prefix(None, namespace_name)
...