WebServices/WSDL

Un article de Agora2ia.


Sommaire

Introduction

Une fois le protocole de communication défini, il demeure important qu'un client sache comment accéder aux Web Services et à leurs interfaces. Ceci sera réalisé grâce au langage WSDL (Web Service Description Language) basé lui aussi sur XML.

Il s'agit en fait d'un langage qui standardise les schémas XML utilisés pour établir une connexion entre émetteurs etrécepteurs de Web Services.

D'après ses spécification, WSDL est un format XML pour la description des services reseau vus comme un ensemble de points de destination traitant des messages contenant de l'information de type documentaire ou procédurale.

! Présentation Afin de définir un Web Service, WSDL utilise certains éléments décrits ci-dessous :

  • « Types » donne les définitions des types de données utilisés pour décrire les messages échangés.
  • « Message » fournit une définition abstraite des données transmises.
  • « Opération » décrit une action prise en charge par le service.
  • « Port Type » est une série d'opérations prises en charge par un ou plusieurs « endpoints ».
  • « endpoint » ou « port » représente l'association d'une liaison (« binding ») et d'une adresse réseau
  • « Binding » est une spécification relative au protocole et au format des données pour un « Port Type »spécifique.
  • Enfin, « Service » représente une série de points réseau.

Un document WSDL n'est donc rien d'autre qu'une série de définitions utilisant ces éléments. De ce fait la racine du document est un élément « definitions » qui encapsule les autres éléments.

Les types de définitions peuvent être référencés dans un document WSDL, cependant ils peuvent également être définis dans d'autres documents et être importés ensuite. Ceci permet des définitions de services plus simples à comprendre mais également plus réutilisables.


+ <definitions>
|
|-+ <portType>                        : Identifiant du service
  |
  |-+ <operation>                     : Une fonction offerte par le service
  | |-- <input message="tns:XXX"/>    : Paramètre d'entré
  | |-- <output message="tns:empty"/> : Paramètre de sortie
  |
  |-+ <message name="XXX">            : Information envoyée
  | |-- <part name="name" type="xsd:string"/> : Un paramètre de l'appel
  • L'élément portType est une abstraction définissant un ensemble de d'opérations (celles du service) et leurs messages associés.
    • Une operation correspond à une méthode donnée du service.
    • Un message défni une requête, une unité d'information transmise entre le serveur et un client. Ce message contient un attribut 'name', formé par le nom de l'opération associée (de la méthode du service), auquel est accolé un suffixe ('In' ou 'Out', 'Request' ou 'Response', ...) pour assuré l'unicité du nom complet. En pratique il n'existe pas de paramètre 'in' ou 'out' : il ne s'agit toujours que d'un message envoyé 'vers' ou 'depuis' un service. Nous avons donc une paire de message définie pour chaque opération du service.
      • Chaque message contient 0 ou plusieurs éléments part qui constituent les paramètres de la méthode.
  • La section binding combine l'abstraction du portType à un protocle physique.
    • On a une sous balise binding qui définit le type de liaison utilisé ('rpc' par exemple) et la couche de transport ('http' par exemple).
  • La balise service associe la liaison à une adresse spécifique.


Les mappings standards du WSDL vers Java

[[ [source|http://ws.apache.org/axis/java/user-guide.html] ]

  • xsd:base64Binary : byte[]
  • xsd:boolean : boolean
  • xsd:byte : byte
  • xsd:dateTime : java.util.Calendar
  • xsd:decimal : java.math.!BigDecimal
  • xsd:double : double
  • xsd:float : float
  • xsd:hexBinary : byte[]
  • xsd:int : int
  • xsd:integer : java.math.!BigInteger
  • xsd:long : long
  • xsd:QName : javax.xml.namespace.QName
  • xsd:short : short
  • xsd:string : java.lang.String


La notion de paramètre

  • pas de in/out 'en rpc'.
  • parameterOrder.


Conclusion

Le fichier WSDL peut être généré depuis ou être à l'origine de, son pendant dans un langage quelconque. Par exemple :

WSDL -[[WSDL2Java]-> JAVA -[[Java2WSDL]-> WSDL ...

Ainsi, avec WSDL, il devient possible pour un client d'invoquer un service Web grâce au protocole SOAP car ilconnaît désormais ses caractéristiques techniques ainsi que le format des messages. Cependant il est relativementfastidieux d'écrire soi-même le ou les fichiers "WSDL" c'est pourquoi, nous ne les détaillerons pas. Dans la pratique ilexiste des outils permettant de les générer automatiquement (comme par exemple l'outil en ligne de commande de laplate-forme GLUE, "java2wsdl", permettant de générer le fichier WSDL correspondant à un service Java ou encore"wsdlgen" contenu dans le toolkit WSTK d'IBM).