web-dev-qa-db-fra.com

Un WSDL peut-il indiquer la version SOAP (1.1 ou 1.2) du service Web?

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?

68
mjn

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.

59
jmhostalet

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.

31

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".

13
mjn

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 .

4
sipwiz

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"/>
2
LilleElefant