Est-il possible de voir si un service Web utilise SOAP 1.1 ou 1.2, sur la base des informations contenues dans le WSDL?
SOAP 1.1 utilise un espace de noms http://schemas.xmlsoap.org/wsdl/soap/
SOAP 1.2 utilise un espace de noms http://schemas.xmlsoap.org/wsdl/soap12/
Le wsdl est capable de définir des opérations sous soap 1.1 et soap 1.2 en même temps dans le même wsdl. C'est utile si vous devez faire évoluer votre wsdl pour prendre en charge de nouvelles fonctionnalités qui nécessitent soap 1.2 (par exemple, MTOM), dans ce cas, vous n'avez pas besoin de créer un nouveau service mais simplement de faire évoluer l'original.
Dans WSDL, si vous regardez la section Binding, vous verrez clairement que la liaison soap est explicitement mentionnée si le service utilise soap 1.2. reportez-vous à l'exemple ci-dessous.
<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>
si le service Web utilise soap 1.1, il ne définira explicitement aucune version de soap dans le fichier WSDL sous la section de liaison. reportez-vous à l'exemple ci-dessous.
<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>
Comment déterminer la version SOAP du message SOAP?
mais rappelez-vous que ce n'est pas une méthode très recommandée pour déterminer la version de savon utilisée par vos services Web. la version du message soap peut être déterminée de l'une des manières suivantes.
1. vérification de l'espace de noms du message soap
SOAP 1.1 namespace : http://schemas.xmlsoap.org/soap/envelope
SOAP 1.2 namespace : http://www.w3.org/2003/05/soap-envelope
2. vérification des informations de liaison de transport (informations d'en-tête http) du message soap
SOAP 1.1: texte utilisateur/xml pour le type de contexte
POST /MyService HTTP/1.1
Content-Type: text/xml; charset="utf-8"
Content-Length: xxx
SOAPAction: "urn:uuid:myaction"
SOAP 1.2: application utilisateur/soap + xml pour le type de contexte
POST /MyService HTTP/1.1
Content-Type: application/soap+xml; charset="utf-8"
Content-Length: xxx
SOAPAction: "urn:uuid:myaction"
. en utilisant SOAP informations sur les défauts
La structure d'un message d'erreur SOAP entre les deux versions est différente.
J'ai trouvé cette page
http://schemas.xmlsoap.org/wsdl/soap12/soap12WSDL.htm
qui dit que Soap 1.2 utilise le nouvel espace de noms http://schemas.xmlsoap.org/wsdl/soap12/
Il se trouve dans "l'extension de liaison WSDL 1.1 pour SOAP 1.1".
Oui, vous pouvez généralement voir ce que SOAP est prise en charge sur la base du WSDL.
Jetez un œil à WSDL du service Web de démonstration . Il a une référence à l'espace de noms soap12 indiquant qu'il prend en charge SOAP 1.2. Si cela était absent, vous seriez probablement en sécurité en supposant que le service n'était pris en charge que SOAP 1.1 .
Attribut de transport trouvé dans l'élément de liaison qui nous indique qu'il s'agit de la liaison WSDL 1.1 pour la liaison HTTP SOAP 1.1.
ex.
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>