Может ли WSDL указывать версию SOAP (1.1 или 1.2) веб-службы? - PullRequest
66 голосов
/ 10 апреля 2009

Можно ли посмотреть, использует ли веб-служба SOAP 1.1 или 1.2 на основе информации в WSDL?

Ответы [ 5 ]

58 голосов
/ 24 сентября 2013

SOAP 1.1 использует пространство имен http://schemas.xmlsoap.org/wsdl/soap/

SOAP 1.2 использует пространство имен http://schemas.xmlsoap.org/wsdl/soap12/

wsdl может определять операции под мылом 1.1 и мылом 1.2 одновременно в одном и том же wsdl. Это полезно, если вам нужно развивать свой wsdl для поддержки новых функций, для которых требуется мыло 1.2 (например, MTOM), в этом случае вам не нужно создавать новый сервис, а просто развивать оригинальный.

30 голосов
/ 08 февраля 2015

В WSDL, если вы посмотрите на раздел Binding , вы четко увидите, что мыльная привязка явно упоминается, если служба использует soap 1.2. см. образец ниже.

<binding name="EmployeeServiceImplPortBinding" type="tns:EmployeeServiceImpl">
<soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="findEmployeeById">
    <soap12:operation soapAction=""/>
    <input><soap12:body use="literal"/></input>
    <output><soap12:body use="literal"/></output>
</operation><operation name="create">
    <soap12:operation soapAction=""/>
    <input><soap12:body use="literal"/></input>
    <output><soap12:body use="literal"/></output>
</operation>
</binding>

если веб-служба использует soap 1.1, она не будет явно определять какую-либо версию soap в файле WSDL в разделе привязки. см. образец ниже.

<binding name="EmployeeServiceImplPortBinding" type="tns:EmployeeServiceImpl">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc"/>
<operation name="findEmployeeById">
    <soap:operation soapAction=""/>
    <input><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></input>
    <output><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></output>
</operation><operation name="create">
    <soap:operation soapAction=""/>
    <input><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></input>
    <output><soap:body use="literal" namespace="http://jaxb.ws.jax.samples.chathurangaonline.com/"/></output>
</operation>
</binding>

Как определить версию SOAP сообщения SOAP?

но помните, что это не очень рекомендуемый способ определения версии мыла, которую используют ваши веб-сервисы. версию сообщения мыла можно определить одним из следующих способов.

1. проверка пространства имен мыльного сообщения

SOAP 1.1  namespace : http://schemas.xmlsoap.org/soap/envelope

SOAP 1.2 namespace  : http://www.w3.org/2003/05/soap-envelope

2. проверка информации о транспортном связывании (информация заголовка http) мыльного сообщения

SOAP 1.1: текст пользователя / xml для типа контекста

   POST /MyService HTTP/1.1
   Content-Type: text/xml; charset="utf-8"
   Content-Length: xxx
   SOAPAction: "urn:uuid:myaction"

SOAP 1.2: пользовательское приложение / soap + xml для типа контекста

   POST /MyService HTTP/1.1
   Content-Type: application/soap+xml; charset="utf-8"
   Content-Length: xxx
   SOAPAction: "urn:uuid:myaction"

3. используя информацию о сбое SOAP

Структура сообщения о сбое SOAP между двумя версиями различна.

13 голосов
/ 17 декабря 2010

Я нашел эту страницу

http://schemas.xmlsoap.org/wsdl/soap12/soap12WSDL.htm

, который говорит, что Soap 1.2 использует новое пространство имен http://schemas.xmlsoap.org/wsdl/soap12/

Он находится в расширении привязки WSDL 1.1 для SOAP 1.1.

4 голосов
/ 10 апреля 2009

Да, обычно вы можете видеть, какая версия SOAP поддерживается на основе WSDL.

Взгляните на Демонстрационный веб-сервис WSDL . У него есть ссылка на пространство имен soap12, указывающее, что он поддерживает SOAP 1.2. Если бы этого не было, то вы, вероятно, были бы в безопасности, если бы служба поддерживала только SOAP 1.1.

2 голосов
/ 25 августа 2011

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

ех.

<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
...