Клиенты SOAP без WSDL

Я пытаюсь разобраться с помощью Стандартной бизнес-отчетности (SBR). Он использует SOAP и ebXML(ebms3).

Они дали этот XML в качестве примера

<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
  <soapenv:Header>
    <eb:Messaging xmlns:eb="http://docs.oasis-open.org/ebxml-msg/ebms/v3.0/ns/core/200704/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" soapenv:mustUnderstand="true" wsu:Id="soapheader-1">
      <ns2:UserMessage xmlns:ns2="http://docs.oasis-open.org/ebxml-msg/ebms/v3.0/ns/core/200704/">
        <ns2:MessageInfo>
          <ns2:Timestamp>2018-01-07T23:01:31.592Z</ns2:Timestamp>
          <ns2:MessageId>A1515366089895.d1b7047b-2e8e-4fa1-81f0-c3eec198bddb@1515366089897</ns2:MessageId>
        </ns2:MessageInfo>
        <ns2:PartyInfo>
          <ns2:From>
            <ns2:PartyId type="http://abr.gov.au/PartyIdType/ABN">67094544519</ns2:PartyId>
            <ns2:Role>http://sbr.gov.au/ato/Role/Business</ns2:Role>
          </ns2:From>
          <ns2:To>
            <ns2:PartyId type="http://abr.gov.au/PartyIdType/ABN">51824753556</ns2:PartyId>
            <ns2:Role>http://sbr.gov.au/agency</ns2:Role>
          </ns2:To>
        </ns2:PartyInfo>
      </ns2:UserMessage>
    </eb:Messaging>

…

  </soapenv:Header>
  <soapenv:Body xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="soapbody"></soapenv:Body>
</soapenv:Envelope>

Насколько я понимаю, многие библиотеки SOAP используют WSDL для создания клиента, который можно вызывать перечисленными службами. Однако я не могу найти WDSL для этого.

Нужно ли для SOAP API иметь WDSL? и вы можете прогрессировать без одного?

2 ответа

Решение

Желательно использовать WSDL для генерации кода на стороне клиента, обычно так вызываются сервисы SOAP.

Однако можно вызвать сервис SOAP, вообще не обращаясь к WSDL. Это может быть необходимо, если используемый вами технологический стек не поддерживает обработку файлов WSDL. Вы можете просто использовать curl для доступа к некоторым сервисам SOAP. Хотя я хотел бы подчеркнуть, что более сложные API-интерфейсы SOAP было бы сложно использовать без генерации клиентского кода из WSDL.

Пример вызова службы SOAP с использованием curl:

Создайте файл getcities.xml с содержанием ниже:

getcities.xml

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetCitiesByCountry xmlns="http://www.webserviceX.NET">
      <CountryName>France</CountryName>
    </GetCitiesByCountry>
  </soap:Body>
</soap:Envelope>

А затем вызовите curl следующим образом:

curl -v -X POST --data @getcities.xml -H "Content-Type: text/xml; charset=utf-8" -H "SOAPAction: http://www.webserviceX.NET/GetCitiesByCountry" http://www.webservicex.net/globalweather.asmx

Вызовы SOAP - это на самом деле просто запросы HTTP POST (почти во всех случаях) с телом XML.

Да, и по соглашению WSDL доступен по URL-адресу службы SOAP с параметром WSDL, например

https://somesoapprovider.net/soapservice?WSDL.

например

http://www.webservicex.net/globalweather.asmx?WSDL

Обратите внимание, что ebMS3/AS4 основан на SOAP и использует его модель и структуры обработки, но это собственная спецификация протокола обмена сообщениями. Хотя спецификации ebMS3/AS4 также используют WS-Security, это не обычный веб-сервис, поскольку существуют дополнительные требования к обработке. Например, в отношении реализации надежного обмена сообщениями с использованием сообщений ebMS Receipt.

Поэтому для реализации обмена сообщениями ebMS3/AS4 в вашем решении принято использовать реализацию поставщика программного обеспечения. Доступно много реализаций, включая поддерживаемые с открытым исходным кодом. Однако для австралийского SBR следует учитывать, что иногда включается расширение к спецификациям AS4, которое требует включения токенов SAML в заголовок WS-Security сообщения. Это расширение не всегда поддерживается.

Другие вопросы по тегам