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.

Systèmes et Applications Répartis

Document source

Systèmes et Applications Répartis

Web services, SOAP, WSDL, XML · PDF · 5 pages · 2014

Afficher l'aperçu du document

Consulter le document original →

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 :

  1. Le nom de la balise principale dans le corps : <order> indique que le nom de la méthode est order.
  2. Le premier paramètre : <partName xsi:type="string"> indique que le premier argument s'appelle partName et qu'il est de type String.
  3. 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'appelle quantity et qu'il est également de type String.

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 (partName puis quantity) 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 :
    1. GetEndorsingBoarder : contient une séquence de deux chaînes (manufacturer et model).
    2. GetEndorsingBoarderResponse : contient une chaîne (endorsingBoarder).
    3. GetEndorsingBoarderFault : contient une chaîne (errorMessage).
  • Justification : Ces définitions encapsulent les données échangées lors d'une requête, d'une réponse ou d'une erreur.
  • 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 XML GetEndorsingBoarder (contenant les chaînes manufacturer et model).
    • Paramètres de retour (output) : Le message GetEndorsingBoarderResponse, qui s'appuie sur l'élément XML de même nom (retournant la chaîne endorsingBoarder).
    • Paramètres d'erreur (fault) : Le message GetEndorsingBoarderFault retournant errorMessage.
    • 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 le portType.

    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 typage xsi: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 :

    1. 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é.
    2. Ligne 5 : Erreur de nom d'opération. Le nom indiqué est GetEndorsBoarder, alors que le WSDL définit l'opération comme GetEndorsingBoarder (il manque "ing").
    3. 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).
    4. Ligne 7 : Incohérence ouverture/fermeture. La balise est ouverte avec <manufacturer> mais fermée avec </manufacture> (il manque le "r" final à la fermeture).
    5. 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>.
    6. 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).
    7. 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) :

    1. 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.
    2. 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.
    3. 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 à une Interface et operation à une Méthode est indispensable pour comprendre l'architecture du service.

    Partager

    Commentaires

    Aucun commentaire pour le moment. Posez la première question.

    Les commentaires sont relus avant publication. Votre e-mail n'est jamais affiché.

    ← Toutes les révisions