Чи можна побачити, чи використовує веб-служба SOAP 1.1 або 1.2, виходячи з інформації в WSDL?
Відповіді:
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), у цьому випадку вам не потрібно створювати нову службу, а просто розвивати оригінальну.
У 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>
якщо веб-служба використовує soap 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 для Context-Type
POST /MyService HTTP/1.1
Content-Type: text/xml; charset="utf-8"
Content-Length: xxx
SOAPAction: "urn:uuid:myaction"
SOAP 1.2: користувацька програма / мило + xml для Context-Type
POST /MyService HTTP/1.1
Content-Type: application/soap+xml; charset="utf-8"
Content-Length: xxx
SOAPAction: "urn:uuid:myaction"
3. використання інформації про несправності SOAP
Структура повідомлення про помилку SOAP між двома версіями різна.
soap
Префікс , який відноситься до 1.1 http://schemas.xmlsoap.org/wsdl/soap/
. soap12
Префікс , який відноситься до 1.2 http://schemas.xmlsoap.org/wsdl/soap12/
. Незалежно від імені префікса (може бути парним foo
або bar
), просто подивіться, який простір імен він розв’язує.
Я знайшов цю сторінку
http://schemas.xmlsoap.org/wsdl/soap12/soap12WSDL.htm
де сказано, що Soap 1.2 використовує новий простір імен http://schemas.xmlsoap.org/wsdl/soap12/
Він міститься у "Розширенні прив'язки WSDL 1.1 для SOAP 1.1".
Так, ви зазвичай можете побачити, яка версія SOAP підтримується на основі WSDL.
Погляньте на демонстраційний веб-сервіс WSDL . У ньому є посилання на простір імен soap12, що означає, що він підтримує SOAP 1.2. Якби цього не було, тоді ви, мабуть, були б у безпеці, припускаючи, що служба підтримує лише SOAP 1.1.
Знайдено атрибут transport в елементі прив'язки, який повідомляє нам, що це прив'язка WSDL 1.1 для прив'язки HTTP SOAP 1.1.
напр.
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>