Можно ли увидеть, использует ли веб-служба SOAP 1.1 или 1.2 на основе информации в WSDL?
Может ли WSDL указать версию SOAP (1.1 или 1.2) веб-службы?
Ответ 1
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), в этом случае вам не нужно создавать новую услугу, а просто разрабатывать исходную.
Ответ 2
В WSDL, если вы посмотрите раздел Связывание, вы ясно увидите, что привязка мыла явно упоминается, если служба использует мыло 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>
если веб-служба использует мыло 1.1, оно не будет явно определять какую-либо мыльную версию в файле 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: пользовательское приложение/мыло + xml для типа контекста
POST /MyService HTTP/1.1
Content-Type: application/soap+xml; charset="utf-8"
Content-Length: xxx
SOAPAction: "urn:uuid:myaction"
3. используя информацию об ошибке SOAP
Структура сообщения об ошибке SOAP между двумя версиями отличается.
Ответ 3
Я нашел эту страницу
http://schemas.xmlsoap.org/wsdl/soap12/soap12WSDL.htm
в котором говорится, что Soap 1.2 использует новое пространство имен http://schemas.xmlsoap.org/wsdl/soap12/
Он находится в расширении WSDL 1.1 для SOAP 1.1.
Ответ 4
Да, вы можете видеть, какая версия SOAP поддерживается на основе WSDL.
Взгляните на демонстрационный веб-сервис WSDL. Он имеет ссылку на пространство имен soap12, указывающее, что оно поддерживает SOAP 1.2. Если это отсутствовало, вы, вероятно, были бы в безопасности, если бы служба поддерживала только SOAP 1.1.
Ответ 5
Найден транспортный атрибут в binding-element, который сообщает нам, что это привязка WSDL 1.1 для привязки HTTP SOAP 1.1.
ех.
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>