Exemple HelpDesk
Approche Contract First Développement d un premier web service en utilisant l approche contract first (ou WSDL First) Écriture du wsdl avant d écrire le code java Autre possibilité implementation first Ecriture du code java avant la mise au point du wsdl
Exemple : helpdesk Simulation d un helpdesk par un service Web : Recherche d une question à partir de son id Créer une question : retourne un id de question (objet complexe en entrée, un format date, une énumération, un enter compris entre 0 et 4 pour qualifier l urgence) Récupérer une liste de questions avec une énumération en entrée (liste d objet en sortie et énumération)
Définition du WSDL 3 étapes : Définition des types de données Définition des messages entrant et sortant Définition des opérations Types de données : Simple : La données n est composée que d une valeur (entier, chaine, énumération, date ) Possible de définir des contraintes (mini, maxi, taille ) Complexe : La donnée est composée d plusieurs valeurs Un élément Java composé de plusieurs valeurs est un élément de type complexe Définition via XML Schéma
Définition du WSDL Eléments simples : Numéro de question : chaîne de caractères de 9 chiffres Urgence : Entier compris entre 0 et 4 Elément complexe : La question : Numéro Date de soumission Choix du produit (énumération dynamique) Type de question (énumération finie) Valeurs : dysfonctionnement en production, dysfonctionnement développement, question, configuration, bug) Urgence : entier Description longue intitulé
Création du projet Eclipse : WebContractHelpdesk Créer le projet Sélectionner menu new/project
Créer un répertoire META-INF WebContractHelpdesk META-INF
WebContractHelpdesk fichier wsdl Créer le fichier WebContractHelpdesk.wsdl A partir du répertoire META-INF Sélectionner new/other, puis web services/wsdl
WebContractHelpdesk fichier wsdl Target namespace (la machine) WebContractHelpdesk.wsdl
WebContractHelpdesk fichier wsdl Design : Source :
Schéma wsdl Sélectionner le wsdl, dans la partie outline déployer le nœud types Click droit sur le wsdl, sélection de open schema
Schéma wsdl Schéma du wsdl (éditeur des types et éléments) Un élément est le message entrant ou sortant qui est utilisé par une opération Un type est la définition d un type simple ou complexe qui sera partagé par plusieurs messages ou types.
Schéma wsdl Création d un type simple Click droit sur le titre types du schéma
Schéma wsdl Création d un type simple Créer le type simple QuestionID : Type string contraintes : minimum length : 9, maximum length : 9 Contraintes spécifiques
Schéma wsdl Contrainte spécifique 1. Sélectionner le type de contrainte spécifique 2. Ajouter 3. Sélectionner le contenu 4. Spécifier les occurences 5. Générer l expression
Schéma wsdl Contrainte spécifique Créer le type simple Urgency (type entier / int) Valeurs comprises entre 0 et 4 (inclues)
Schéma wsdl Création d un type complexe Click droit sur le titre types du schéma, sélectionner Add Complex Type Créer le type complexe Question Après la création doubleclick sur Question
Schéma wsdl Création d un type complexe Création d une propriété à partir d un type existant
Schéma wsdl Création d un type complexe Création d une propriété à partir d un type existant Sélectionner Browse pour aller chercher le type existant Sélectionner le type concerné (QuestionID)
Schéma wsdl Création d un type complexe Création d une propriété de type Date (SubmitDate)
Schéma wsdl Création d un type complexe Création d une propriété de type String, composée de 2 caractères (Product)
Schéma wsdl Création d un type complexe Création d une propriété utilisant une énumération (Type), type String Contrainte spécifique pour l énumération
Schéma wsdl Création d un type complexe Création d une propriété de type entier compris entre 0 et 4 (Priority de type Urgency)
Schéma wsdl Création d un type complexe Création d une propriété de type String (Description)
Schéma wsdl Création d un type complexe Création d une propriété de type String (Title), de longueur maximale de 250 caractères
Schéma wsdl Création d un type complexe Schéma définitif :
Schéma wsdl Création des opérations L opération est composée d une entrée et d une sortie. C est dans cette partie que l on définit les messages : on commence par créer l opération. Le wizard crée alors automatiquement les deux messages (entrant et sortant). Il suffit ensuite de les définir. Cet approche correspond à ce qui s appelle le Wrapped Document Literal : Le message SOAP contient les paramètres utiles du message (c est le sens du Document Literal). Les paramètres sont encapsulés dans un paramètre complexe qui porte le nom de l opération (c est le sens du wrapped). Le document literal wrapped est à ce jour (mai 2007) le mécanisme qui est considéré comme le plus portable (il s agit du mécanisme préféré de.net et d Axis2).
Schéma wsdl Création des opérations Le wizard Eclipse permet donc de créer automatiquement lors de la création d une opération les deux paramètres encapsulant le message entrant et le message sortant. Il suffit ensuite de définir chacun des messages. Nous allons créer les opérations suivantes : recherche d une question à partir de son ID créer une question : retourne un ID de question
Schéma wsdl Création des opérations Fermer l onglet Inline Schema en enregistrant les modifications Sélectionner l onglet WebContractHelpdesk.wsdl Renommer Newoperation en NewQuestion Automatiquement les Input et output passe à NewQuestion et NewQuestionResponse
Schéma wsdl Création de l opération NewQuestion Sélectionner la flèche NewQuestion
Schéma wsdl Création de l opération NewQuestion On voit un objet NewQuestion et un objet NewQuestionType. 1. Renommer newquestiontypes, in => on renomme en Question 2. Sélection du type de l entrée : type Question 3. Sauvegarder et fermer l onglet «Inline Schema of WebContractHelpdesk.wsdl»
Schéma wsdl Création de l opération NewQuestionReponse Sélectionner la flèche NewQuestionReponse
Schéma wsdl Création de l opération NewQuestionReponse On voit un objet NewQuestionReponse et un objet NewQuestionReponseType. 1. Renommer newquestionreponsetype, out => on renomme en id 2. Sélection du type de l entrée : type QuestionID 3. Sauvegarder et fermer l onglet «Inline Schema of WebContractHelpdesk.wsdl»
Schéma wsdl Création de l opération getquestionwithid Création d une nouvelle opération : récupération d une question en fonction de son id 1. Sélectionner Add Operation 2. Renommer l opération en getquestionwithid
Schéma wsdl Création de l opération getquestionwithid Sélectionner la flèche getquestionwithid
Schéma wsdl Création de l opération getquestionwithld 1. Renommer getquestionwithidtype, in => on renomme en id 2. Sélection du type de l entrée : type QuestionID 3. Sauvegarder et fermer l onglet «Inline Schema of WebContractHelpdesk.wsdl»
Schéma wsdl Création de l opération getquestionwithld Sélectionner la flèche getquestionwithidresponse
Schéma wsdl Création de l opération getquestionwithld 1. Renommer getquestionwithidresponsetype, out => on renomme en question 2. Sélection du type de la sortie : type Question 3. Sauvegarder et fermer l onglet «Inline Schema of WebContractHelpdesk.wsdl»
Schéma final du wsdl : Schéma wsdl
Génération du binding Le binding est la définition pour une opération des protocoles qui sont disponibles pour l appeler. Suite à l ajout d une opération ou à la modification de son nom, il faut mettre à jour les bindings disponibles. 1. Sélectionner Binding 2. Generate Binding Contents
Génération du binding Laissez ces options par défaut : document literal. Cliquez sur Finish
Schéma wsdl Vérifier et éventuellement modifier l adresse du WebContractHelpDesk Enregistrer le wsdl
Schéma wsdl - Conclusion Création d un wsdl à la norme 1.1 Avec binding SOAP 1.1 Wsdl complet, il prend en compte : Un type complexe : la question Il définit des contrôles de saisie sur des types simples Les restrictions et l ensemble du wsdl est complètement indépendant d un quelconque langage