Kann anhand der Informationen in der WSDL festgestellt werden, ob ein Webdienst SOAP 1.1 oder 1.2 verwendet?
Antworten:
SOAP 1.1 verwendet den Namespace http://schemas.xmlsoap.org/wsdl/soap/
SOAP 1.2 verwendet den Namespace http://schemas.xmlsoap.org/wsdl/soap12/
Die WSDL kann Operationen unter Seife 1.1 und Seife 1.2 gleichzeitig in derselben WSDL definieren. Dies ist nützlich, wenn Sie Ihre WSDL weiterentwickeln müssen, um neue Funktionen zu unterstützen, für die Seife 1.2 (z. B. MTOM) erforderlich ist. In diesem Fall müssen Sie keinen neuen Dienst erstellen, sondern nur den ursprünglichen weiterentwickeln.
Wenn Sie sich in WSDL den Abschnitt Bindung ansehen , werden Sie deutlich sehen, dass die Seifenbindung ausdrücklich erwähnt wird, wenn der Dienst Seife 1.2 verwendet. Siehe das folgende Beispiel.
<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>
Wenn der Webdienst Seife 1.1 verwendet, definiert er keine Seifenversion in der WSDL-Datei unter dem Bindungsabschnitt explizit. Beziehen Sie sich auf das folgende Beispiel.
<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>
Wie bestimme ich die SOAP-Version der SOAP-Nachricht?
Denken Sie jedoch daran, dass dies keine sehr empfohlene Methode ist, um die von Ihren Webdiensten verwendete Seifenversion zu bestimmen. Die Version der Seifennachricht kann auf eine der folgenden Arten bestimmt werden.
1. Überprüfen Sie den Namespace der Seifennachricht
SOAP 1.1 namespace : http://schemas.xmlsoap.org/soap/envelope
SOAP 1.2 namespace : http://www.w3.org/2003/05/soap-envelope
2. Überprüfen der Transportbindungsinformationen (http-Headerinformationen) der Seifennachricht
SOAP 1.1: Benutzertext / XML für den Kontexttyp
POST /MyService HTTP/1.1
Content-Type: text/xml; charset="utf-8"
Content-Length: xxx
SOAPAction: "urn:uuid:myaction"
SOAP 1.2: Benutzeranwendung / soap + xml für den Kontexttyp
POST /MyService HTTP/1.1
Content-Type: application/soap+xml; charset="utf-8"
Content-Length: xxx
SOAPAction: "urn:uuid:myaction"
3. Verwenden von SOAP-Fehlerinformationen
Die Struktur einer SOAP-Fehlermeldung zwischen den beiden Versionen ist unterschiedlich.
soap
Präfix, das sich auf 1.1 bezieht, lautet http://schemas.xmlsoap.org/wsdl/soap/
. Das soap12
Präfix, das sich auf 1.2 bezieht, lautet http://schemas.xmlsoap.org/wsdl/soap12/
. Was auch immer der Präfixname ist (könnte gerade foo
oder sein bar
), schauen Sie sich einfach an, welchen Namespace er auflöst.
Ich habe diese Seite gefunden
http://schemas.xmlsoap.org/wsdl/soap12/soap12WSDL.htm
was besagt, dass Soap 1.2 den neuen Namespace http://schemas.xmlsoap.org/wsdl/soap12/ verwendet.
Es befindet sich in der 'WSDL 1.1-Bindungserweiterung für SOAP 1.1'.
Ja, Sie können normalerweise sehen, welche SOAP-Version basierend auf der WSDL unterstützt wird.
Schauen Sie sich den Demo-Webdienst WSDL an . Es enthält einen Verweis auf den Namespace soap12, der angibt, dass SOAP 1.2 unterstützt wird. Wenn dies nicht der Fall wäre, wären Sie wahrscheinlich sicher, wenn der Dienst nur SOAP 1.1 unterstützt.
Transport-Attribut im Bindungselement gefunden, das uns sagt, dass dies die WSDL 1.1-Bindung für die SOAP 1.1-HTTP-Bindung ist.
Ex.
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>