Services Web WS* - WSDL pour les interfaces et SOAP pour les messages
Table of Contents
1 WSDL - Web Services Description Language
Version 1.0 pour CXF, version 2.0 (la dernière) en cours d'implémentation
Document WSDL : document XML appelé contrat
1.1 Structure
<definitions> <types> définition des types de données ... </types> <message> déclaration des messages ... (utilisation des types de données) </message> <!-- ... --> <portType> déclaration d'une interface pour un port ... <operation> déclaration d'une opération de l'interface ... (utilisation des déclarations de messages) </operation> <!-- ... --> </portType> <!-- ... --> <binding> définition d'une liaison entre interface de port et protocole de communication ... </binding> <!-- ... --> <service> déclaration d'un service concret ... <port> définition d'un port ... (utilisation d'une liaison) </port> <!-- ... --> </service> <!-- ... --> </definitions>
1.2 Racine
- élément wsdl:definitions
- nom du service web (attribut name)
- espace de nommage cible pour les entités définies dans le document WSDL (attribut targetnamespace)
- noms d'usage pour des espaces utiles de nommage :
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://soap/" <!-- target namespace -->
1.3 Types de données
- élément wsdl:types
- définition d'un schéma pour les données, fréquemment par importation
d'un fichier définissant des éléments avec leurs types
<schema xmlns="http://www.w3.org/2001/XMLSchema"> <import namespace="http://soap/" schemaLocation="automate_schema1.xsd"/> </schema>
1.4 Déclaration des messages
- un élément wsdl:message (avec un attribut name) pour chaque déclaration de message
- un ou plusieurs éléments wsdl:part (avec un attribut name pour l'identification et un attribut element pour indiquer un élément du schéma) (pour CXF : un seul élément wsdl:part de nom parameters)
1.5 Interface de ports
Les déclarations des opérations sont regroupées dans des interfaces, appelées types de port.
- par interface, un élément wsdl:portType (avec un attribut name pour nommer l'interface) regroupant un ou plusieurs éléments wsdl:operation (avec un attribut name pour nommer l'opération) déclarant chacun une opération
- élément wsdl:operation déclarant son type par une combinaison des
éléments wsdl:input et wsdl:output, et possiblement un élément
wsdl:fault (pour signaler une faute), chaque sous-élément étant
spécifié par un attribut optionnel name et un attribut message
indiquant le type du message
Revue des quatre combinaisons possibles :
- procédure (one-way) : wsdl:input seul
- requête-réponse : wsdl:input suivi de wsdl:ouput
- sollicitation-réponse : wsdl:output suivi de wsdl:input
- alerte : wsdl:output seul
1.6 Liaison
Une liaison relie une interface de port appartenant à la couche logique à un type de communication particulier, SOAP généralement, HTTP possiblement, ou autre, appartenant à la couche physique : elle concrétise physiquement la définition logique de l'interface.
- élément wsdl:binding avec un attribut name pour nommer la liaison et un attribut type pour l'interface du port
- pour chaque opération de l'interface du port, un élément wsdl:operation avec un attribut name pour identifier l'opération et des sous-éléments wsdl:input, wsdl:output et wsdl:fault correspondant au type de l'opération
- spécification de la liaison en attachant des sous-éléments provenant d'autres espaces de nommage aux éléments précédents
- liaison SOAP
espace de nommage "http://schemas.xmlsoap.org/wsdl/soap/" (nommé soap ici)
- sous wsdl:binding : élément soap:binding avec l’attribut transport indiquant le protocole utilisé pour l’échange des messages SOAP, (en général HTTP précisé par l’URI "http://schemas.xmlsoap.org/soap/http") et l’attribut style précisant le mode par défaut de représentation du corps du message SOAP rpc ou document (cas de CXF)))
- sous wsdl:operation : élément soap:operation avec l'attribut style raffinant celui hérité de soap:binding et l'attribut soapAction donnant l'intention (cas de CXF : fixé à "", pour signifier que l'intention est dans l'URI du service)
- sous wsdl:input, wsdl:output ou wsdl:fault : élément soap:body avec l'attribut use valant literal pour compléter le mode
1.7 Service
Ensemble de ports spécifiés par une liaison (interface reliée à un protocole) et une adresse URI
- service : élément wsdl:service avec un attribut name pour le nommer
- pour chaque port : sous-élément wsdl:port avec un attribut name pour le nommer, un attribut binding spécifiant la liaison et dans le cas SOAP, et contenant un sous-élément soap:address précisant l'adresse URI du port par son attribut location
2 SOAP
Protocole pour l'échange de messages
- v1.0 en 1998
- v1.2 en 2003
Protocole de transport : HTTP, SMTP, etc.
Intérêt de HTTP pour le transport : ubiquité (passage des firewalls)
2.1 Structure
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" > <soap:Header> contenu xml ... </soap:Header> <soap:Body> contenu xml ... </soap:Body> </soap:Envelope>
- en-tête : élément soap:Header contenant des informations sur le message (identité, signature, etc.)
- corps : élément soap:Body contenant le message, un document XML
- 4 modes de représentation pour le message : (document + rpc) x (literal + encoded)
- pour les services (WS-Interoperability Basic Profile) : deux modes
- document x literal : document XML conforme à un schéma quelconque
- rpc x literal : document XML conforme à un schéma particulier représentant une commande (fonction accompagnée de ses arguments ou de son résultat)
- avec CXF : un mode document x literal (et pas d'en-tête) avec un schéma représentant des commandes