Kann anhand der Informationen in der WSDL festgestellt werden, ob ein Webdienst SOAP 1.1 oder 1.2 verwendet?
web-services
soap
wsdl
mjn
quelle
quelle
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.
quelle
soap
Präfix, das sich auf 1.1 bezieht, lautethttp://schemas.xmlsoap.org/wsdl/soap/
. Dassoap12
Präfix, das sich auf 1.2 bezieht, lautethttp://schemas.xmlsoap.org/wsdl/soap12/
. Was auch immer der Präfixname ist (könnte geradefoo
oder seinbar
), 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'.
quelle
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.
quelle
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"/>
quelle