Systèmes et Applications Répartis
Exercice 1 : Web services (Exam MCAR 2/2015) Question 1 - Correspondance des balises WSDL vers Java Le tableau ci-dessous établit la correspondance entre les concepts définis dans un fichier WSDL (Web Services Description Language) et les éléments équivalents dans le langage Java.
D'après le document Systèmes et Applications Répartis
Cet article a été rédigé automatiquement à partir du document source, puis vérifié avant publication.

Document source
Web services, SOAP, WSDL, XML · PDF · 5 pages · 2014
Afficher l'aperçu du document
Exercice 1 : Web services (Exam MCAR 2/2015)
Question 1 - Correspondance des balises WSDL vers Java
Le tableau ci-dessous établit la correspondance entre les concepts définis dans un fichier WSDL (Web Services Description Language) et les éléments équivalents dans le langage Java.
| Balises wsdl | Terme en java |
|---|---|
| operation | Méthode (Method) |
| portType | Interface (Interface) |
| message | Paramètres d'appel et type de retour (Arguments and return type) |
| service | Classe ou Package (Class / Package) (Indiqué dans le sujet : "class of package") |
| type | Types de données (Data types / JavaBeans / Primitives) |
Question 2 - Correspondance de l'enveloppe SOAP avec une méthode Java
L'extrait SOAP fourni permet d'identifier trois éléments cruciaux pour retrouver la méthode Java :
- Le nom de la balise principale dans le corps :
<order>indique que le nom de la méthode estorder. - Le premier paramètre :
<partName xsi:type="string">indique que le premier argument s'appellepartNameet qu'il est de typeString. - Le second paramètre :
<quantity xsi:type="string">(attention au type "string" spécifié dans l'attribut, et non un entier) indique que le second argument s'appellequantityet qu'il est également de typeString.
Si l'on analyse les choix proposés :
- (a) Noms de méthodes incorrects et type entier pour quantity.
- (b)
void order(String quantity, String partName): Les types sont bons, mais l'ordre des paramètres est inversé par rapport au document XML. - (c) Type entier pour partName, ce qui contredit
xsi:type="string". - (d)
String order(String partName, String quantity): Le nom, l'ordre des paramètres (partNamepuisquantity) et les types (String pour les deux) correspondent parfaitement à la requête.
Réponse correcte : (d) (Note : l'option (b) contient les bons paramètres, mais (d) respecte l'ordre séquentiel d'apparition des paramètres dans le flux XML, ce qui est déterminant en mode RPC).
Question 3 - Analyse de l'extrait de fichier WSDL
En s'appuyant sur l'annexe fournie, voici les éléments qui décrivent le service web :
a) Nom du « web service »
Le nom du service web se trouve dans la balise <wsdl:service>.
- Réponse :
EndorsementSearchService - Justification : La balise
<wsdl:service name="EndorsementSearchService">déclare explicitement ce nom à la fin du document.
b) Types de données décrits dans le langage XML
Les types sont définis dans la section <wsdl:types>, à l'intérieur d'un <xsd:schema>.
- Réponse : Trois types complexes sont définis, et ils utilisent tous des éléments de type primitif
string:GetEndorsingBoarder: contient une séquence de deux chaînes (manufactureretmodel).GetEndorsingBoarderResponse: contient une chaîne (endorsingBoarder).GetEndorsingBoarderFault: contient une chaîne (errorMessage).
c) Opérations, paramètres, et mode de transport
Ces informations sont réparties entre les balises <wsdl:portType>, <wsdl:operation> et <wsdl:binding>.
- Opérations : Une seule opération est définie, nommée
GetEndorsingBoarder. - Paramètres d'appel (input) : Le message
GetEndorsingBoarderRequest, qui s'appuie sur l'élément XMLGetEndorsingBoarder(contenant les chaînesmanufactureretmodel). - Paramètres de retour (output) : Le message
GetEndorsingBoarderResponse, qui s'appuie sur l'élément XML de même nom (retournant la chaîneendorsingBoarder). - Paramètres d'erreur (fault) : Le message
GetEndorsingBoarderFaultretournanterrorMessage. - Mode de transport : Le protocole HTTP.
- Justification : La balise
<soap:binding transport="[http://schemas.xmlsoap.org/soap/http](http://schemas.xmlsoap.org/soap/http)"/>spécifie HTTP comme couche de transport. Les paramètres sont déclarés dans les balises<wsdl:input>,<wsdl:output>et<wsdl:fault>rattachées à l'opération dans leportType.
Question 4 - Signification de la déclaration <soap:body>
<soap:body use="literal"
namespace="http://schemas.snowboard-info.com/EndorsementSearch.xsd"/>
Signification : Cette ligne configure la manière dont le corps du message SOAP sera formaté et validé.
use="literal": Indique que les données dans le corps du message SOAP doivent suivre exactement le schéma XML défini dans la section<types>du WSDL, sans ajouter de règles d'encodage spécifiques à SOAP (comme les attributs de typagexsi:type). Le XML envoyé sera littéralement ce qui est décrit dans le XSD.namespace="...": Définit l'espace de noms (URI) cible (Target Namespace) auquel appartiennent les éléments XML qui seront insérés dans le corps du message SOAP.
Question 5 - Identification des erreurs de syntaxe dans la requête SOAP
L'extrait de requête SOAP contient de nombreuses erreurs de syntaxe XML et d'incohérences vis-à-vis du schéma WSDL défini en annexe. Voici les 7 erreurs identifiées, ligne par ligne :
- Ligne 5 : Chevron fermant prématuré. La balise
<m:GetEndorsBoarder>est fermée par un chevron>avant que l'attribut d'espace de noms de la ligne 6 ait pu être déclaré. - Ligne 5 : Erreur de nom d'opération. Le nom indiqué est
GetEndorsBoarder, alors que le WSDL définit l'opération commeGetEndorsingBoarder(il manque "ing"). - Ligne 6 : Attribut orphelin et invalide. À cause de l'erreur précédente, la déclaration
xmlns:m="[http://namespaces.snowboard-info.com](http://namespaces.snowboard-info.com)">se retrouve en dehors de toute balise, ce qui constitue une syntaxe XML totalement invalide (texte flottant non autorisé avec un attribut). - Ligne 7 : Incohérence ouverture/fermeture. La balise est ouverte avec
<manufacturer>mais fermée avec</manufacture>(il manque le "r" final à la fermeture). - Ligne 8 : Erreur de nom d'élément (schéma). La balise est nommée
<mode>, alors que le schéma XSD du WSDL s'attend explicitement à un élément nommé<model>. - Ligne 9 : Erreur de nom sur la balise fermante. L'opération est fermée avec
</m:GetEndorsBoarder>. Tout comme pour la ligne 5, l'orthographe est fausse par rapport au WSDL (GetEndorsingBoarder). - Ligne 10 : Mauvaise fermeture du corps SOAP. Il est écrit
<SOAP-ENV:Body>qui est une balise ouvrante. Il devrait s'agir de la balise fermante</SOAP-ENV:Body>(il manque la barre oblique/).
Méthode
Pour aborder efficacement une épreuve sur les Web Services (WSDL et SOAP) :
- Lecture croisée : Face à une question sur une trame SOAP, référez-vous toujours au schéma WSDL fourni (souvent en annexe). Le WSDL fait autorité sur la structure, les types de données (
<xsd:schema>), et le nommage exact des balises. - Rigueur syntaxique : Le XML est strict. Une majuscule inversée, un "r" manquant ou un chevron
>mal placé rend l'ensemble du flux invalide. Lisez le code caractère par caractère lorsqu'on vous demande de trouver des erreurs. - Mappage conceptuel : Mémorisez le vocabulaire de liaison entre la théorie des objets (Java, C#) et le monde des services web (WSDL). Savoir que
portTypeéquivaut à uneInterfaceetoperationà uneMéthodeest indispensable pour comprendre l'architecture du service.
Commentaires
Aucun commentaire pour le moment. Posez la première question.