Chapitre 5 Web Services : Le nouveau standard JAX-WS 2.0 Sommaire Développement de Web services Revue des standards des Web services Le protocole SOAP Le langage WSDL Le service d’annuaires UDDI Développement classique avec Apache Axis Développement avec JAX-WS 2.0 M.Romdhani, INSAT, Octobre 2009 2 Développement de Web services Définition de l’architecture SOA « Il s’agit d’un modèle pour organiser et architecturer les services offerts par un organisme » (Définition de l’OASIS) Serviceoriented architectures Client/ server Web client On-line midrange Batch 1970s 1980s M.Romdhani, INSAT, Octobre 2009 1990s 2000s 2010s 3 Développement de Web services SOA : Intégration on interopérabilité ? Solution à fort couplage Architecture orientée Services L’autre Vous Programming Language Database Agreements Object Model Programming Language Database Object Model Schema Operating System Operating System Application Server M.Romdhani, INSAT, Octobre 2009 Application Server 4 Développement de Web services L'architecture orientée service « Service-oriented architectures are an approach to designing distributed computing systems that considers software resources as services available on a network. » Les 4 principes fondamentaux de SOA [Définition de microsoft « Don Box »] : 1. Frontière explicite 2. Services Autonomes 3. Les services partagent les schémas, les contrats mais pas les classes 4. La compatibilité des services est négociée sur la base de stratégies M.Romdhani, INSAT, Octobre 2009 5 Développement de Web services Services Service Message2 Message1 Logic State Contracts M.Romdhani, INSAT, Octobre 2009 6 Développement de Web services L‘idée principale de la SOA Messages Flux de données non encapsulées Pas de suppositions sur l‘implémentation Contrats: Frontières explicites Les types de données et les sémantiques y sont explicités Les types de données doivent permettre l‘évolution Les paramètres techniques de sécurité, de transactions pour les Services sont négociables dynamiquement Processus autonomes. « Building Blocks », et non pas des Silos. M.Romdhani, INSAT, Octobre 2009 7 Développement de Web services Revue des standards des Web services M.Romdhani, INSAT, Octobre 2009 8 Développement de Web services Qu’est ce qu’un Web Service ? Les Web Services sont des services offerts via le web Un service Web est un ensemble de protocoles et de normes utilisés pour échanger des données entre les applications Web Service = HTTP + XML Les prolifération des Services Web correspond à un nouveau standard d’architectures applicatives qui est le SOA (Service Oriented Architecture) Un exemple : un client demande le prix d’un article en envoyant un message sur le web. Ce message contient la référence de l’article. Le Web Service va recevoir la référence, effectuer le traitement du service et renvoyer le prix au client via un autre message. M.Romdhani, INSAT, Octobre 2009 9 Développement de Web services Standards des Web services Les Standards décrivent : Qu’est ce qui circule “sur le fil” ? Formats et protocoles (SOAP) Qu’est ce qui décrit ce qui circule “sur le fil” ? Langage de Description (WSDL) Qu’est ce qui nous permet de trouver ces descriptions ? Référentiel (UDDI) M.Romdhani, INSAT, Octobre 2009 10 Développement de Web services SOAP (Simple Object Access Protocol) Standard W3C (Initiative IBM et Microsoft) C’est un protocole de RPC pour l’invocation des méthodes d'objets distants Basé entièrement sur XML C’est une spécification non propriétaire Prend en charge : divers protocoles de transport (HTTP, SMTP,…) différents formats (MIME,…) M.Romdhani, INSAT, Octobre 2009 11 Développement de Web services Structure d’un message SOAP Message SOAP = Enveloppe ( Header + Body ) SAOP Header (Optional) SAOP Body M.Romdhani, INSAT, Octobre 2009 12 Développement de Web services WSDL (Web Services Description Language) Standard W3C Langage de description des services Web Basé entièrement sur XML (Schéma XML) Définition de l’interface, de l’URL et du port du Web Service M.Romdhani, INSAT, Octobre 2009 13 Développement de Web services Contrat WSDL Constitué par : Un composant d’interface : - Format de transmission des messages Protocole du Service Web Opérations de transmission des messages Un composant d’implémentation : le point d’accès (URL) du Service Web M.Romdhani, INSAT, Octobre 2009 14 Développement de Web services UDDI (Universal Description Discovery and Integration) Les Services Web n’ont un sens que si des utilisateurs potentiels peuvent les localiser C’est une technologie d'annuaire Recommandation OASIS (Consortium travaillant sur la standardisation des technologies Web Services) Référentiel défini lui-même en WSDL Référentiel Public / Privé M.Romdhani, INSAT, Octobre 2009 15 Développement de Web services UDDI : comment ça marche ? M.Romdhani, INSAT, Octobre 2009 16 Développement de Web services Composition du répertoire UDDI Chaque entrée du répertoire UDDI est constituée de trois parties : 1. Les "pages blanches" décrivent l'entreprise qui offre le service (nom, adresse, contacts,…) 2. Les "pages jaunes" comportent les catégories industrielles 3. Les "pages vertes" : contiennent une description technique de l’interface M.Romdhani, INSAT, Octobre 2009 17 Développement de Web services Récapitulatif SOAP, WSDL, et UDDI WSDL C’est le langage de description des services Web UDDI C’est une technologie d'annuaire M.Romdhani, INSAT, Octobre 2009 Standard W3C SOAP 1.2 Standard W3C WSDL 2.0 Recommandation OASIS UDDI 3.0 IBM, MICROSOFT ARIBA COMPAQ HP… Entièrement basés sur XML SOAP C’est un protocole de RPC pour l’invocation des méthodes d'objets distants IBM MICROSOFT ARIBA ARIBA 18 Développement de Web services Scénario de déroulement 1 Enregistrement du service Annuaire UDDI SOAP 2 SOAP Recherche d’un service Service Web Client HTTP 3 Interface WSDL Récupération de l’interface du service SOAP proxy 4 Utilisation du service M.Romdhani, INSAT, Octobre 2009 19 Développement de Web services Le protocole SOAP M.Romdhani, INSAT, Octobre 2009 20 Développement de Web services Exemple de message SOAP POST /StockQuote HTTP/1.1 Host: www.stockquoteserver.com Content-Type: text/xml; charset="utf-8" Propre au portage sur HTTP Content-Length: nnnn SOAPAction: "Some-URI" <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <m:GetLastTradePrice xmlns:m="Some-URI"> <symbol>DIS</symbol> </m:GetLastTradePrice> </SOAP-ENV:Body> </SOAP-ENV:Envelope> M.Romdhani, INSAT, Octobre 2009 21 Développement de Web services Exemple de message de réponse HTTP/1.1 200 OK Content-Type: text/xml; charset="utf-8" Propre au portage sur HTTP Content-Length: nnnn <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> <SOAP-ENV:Body> <m:GetLastTradePriceResponse xmlns:m="Some-URI"> <Price>34.5</Price> </m:GetLastTradePriceResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> M.Romdhani, INSAT, Octobre 2009 22 Développement de Web services Analyse de l’exemple Des Balises Utilisateur GetLastTradePriceResponse Symbol Price Un Namespace Utilisateur xmlns:m="Some-URI" Des Balises SOAP Enveloppe Body Un Namespace SOAP xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" Des informations dans la partie HTTP M.Romdhani, INSAT, Octobre 2009 23 Développement de Web services SOAP Header Mécanisme d’extension du protocol SOAP La balise Header est optionnelle Si la balise Header est présente, elle doit être le premier fils de la balise Envelope La balise Header contient des entrées Une entrée est n’importe quelle balise incluse dans un namespace Exemple de SOAP HEADER <SOAP-ENV:Header> <t:Transaction xmlns:t="some-URI"> 5 </t:Transaction> </SOAP-ENV:Header> M.Romdhani, INSAT, Octobre 2009 24 Développement de Web services SOAP Body Le Body contient le message à échanger La balise Body est obligatoire La balise Body doit être le premier fils de la balise Envelope (ou le deuxième si il existe une balise Header) La balise Body contient des entrées Une entrée est n’importe quelle balise incluse optionnellement dans un namespace Une entrée peut être une Fault. M.Romdhani, INSAT, Octobre 2009 25 Développement de Web services Encodage Un message SOAP contient des données typées. Il faut donc définir un moyen d’encoder ces données. Vocabulaire SOAP : Value (valeur d’une donnée) Simple value (string, integers,etc) Compound value (array, struct, …) Type (d’une value) Simple Type Compound Type M.Romdhani, INSAT, Octobre 2009 26 Développement de Web services SOAP avec HTTP SOAP peut être facilement porté sur Http Convient au mode Request/Response de Http Le message SOAP est mis dans une requête POST avec un contenttype text/xml Définition d’un header http : SOAPAction Utilisation des codes http (2xx, 4xx, 5xx) M.Romdhani, INSAT, Octobre 2009 27 Développement de Web services Le langage WSDL M.Romdhani, INSAT, Octobre 2009 28 Développement de Web services Présentation Une description WSDL : 1. Décrit le type d’un service web (méthodes, types des paramètres) Cette description peut être comparée à la description IDL CORBA, elle peut servir à générer automatiquement des amorces. 2. Décrit les aspects techniques d’implantation d’un service web (quel est le protocole utilisé, quel est le l’adresse du service) Cette description sert à se connecter concrètement à un service web. M.Romdhani, INSAT, Octobre 2009 29 Développement de Web services Balises Une description WSDL est un document XML qui commence par la balise definition et contient les balises suivantes : types: cette balise décrit les types utilisés message: cette balise décrit la structure d’un message échangé portType: cette balise décrit un ensemble d’opérations (interface d’un service web) operation: cette balise décrit une opération réalisée par le service web. Une opération reçoit des messages et envois des messages. binding: cette balise décrit le lien entre un protocole (http) et un portType. service: cette balise décrit un service comme un ensemble de ports. port: cette balise décrit un port au travers duquel il est possible d’accéder à un ensemble d’opérations. Un port référence un Binding M.Romdhani, INSAT, Octobre 2009 30 Développement de Web services Développer des Web services avec Apache Axis M.Romdhani, INSAT, Octobre 2009 31 Développement de Web services Architecture (Serveur) Axis fournit une Servlet (AxisServlet) qui reçoit des message SOAP sur http et qui transforme l’appel en un appel de méthode classique Java Développer un Web Service revient alors à développer un objet Java et à enregistrer ses méthodes auprès de la Servlet AxisServlet. Les clients envoient alors leurs messages SOAP sur http à AxisServlet. Pour SMTP les clients envoient leurs messages par mail à un démon. Le démon reçoit ces messages et les renvoie sur http à AxisServlet. M.Romdhani, INSAT, Octobre 2009 32 Développement de Web services Architecture (Serveur) La Servlet AxisServlet reçoit et renvoie les messages SOAP et transmet aux objets Java correspondant SOAP/HTTP Les Objets Java effectuent les services. Ils sont des objets Java classiques. AxisServlet Moteur de Servlet Le client envoie des messages SOAP/HTTP JVM Objets Java et Servlet sont dans la même JVM (pas de répartition). M.Romdhani, INSAT, Octobre 2009 33 Développement de Web services Développement d’un Web Service Développer une classe Java public class MyFirstWebService { public final String BOOK1 = "La méthode"; public final String BOOK2 = "Le Macroscope"; public int getPrice(String bookTitle) { if (bookTitle.compareTo(BOOK1)==0) { return 15; } else if (bookTitle.compareTo(BOOK2)==0) { return 20; } else return 300; } } M.Romdhani, INSAT, Octobre 2009 34 Développement de Web services Déploiement un Web Service Elaborer un descripteur SOAP de votre classe <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="MyFirstWebService" provider="java:RPC"> <parameter name="className" value="MyFirstWebService"/> <parameter name="allowedMethods" value="*"/> </service> </deployment> Exporter le descripteur java org.apache.axis.client.AdminClient deploy.wsdd M.Romdhani, INSAT, Octobre 2009 35 Développement de Web services Déploiement un Web Service Le fichier jws sont les équivalents des jsp pour les Web Service. Construction d’un fichier jws à partir d’une classe java: Copy MyFirstWebService.java /…/MyFirstWebService.jws M.Romdhani, INSAT, Octobre 2009 36 Développement de Web services Le Client à partir du WSDL Génération d’un ensemble de classes facilitant l’envoi de message SOAP: java org.apache.axis.wsdl.WSDL2Java file.wsdl Classes générées: Pour les Type Pour les PortType Pour les Binding Pour les Port Pour les Service M.Romdhani, INSAT, Octobre 2009 37 Développement de Web services Obtention du WSDL de l’exemple Sous axis, dans un navigateur, mettre l’adresse du Web Service suivie de ?WSDL http://localhost:8080/axis/jwspages/MyFirstWebService.jws?WSDL M.Romdhani, INSAT, Octobre 2009 38 Développement de Web services Développement avec JAX-WS 2.0 M.Romdhani, INSAT, Octobre 2009 39 Développement de Web services Java API 4 XML-based Web Services Successeur de JAX-RPC. Actuellement en version 2.0 Permet de créer des services Web dans le conteneur Web dans le conteneur EJB Supporte les injections de dépendances M.Romdhani, INSAT, Octobre 2009 40 Développement de Web services Exemple de Service @javax.ejb.Stateless () // à supprimer si le service est créé dans un WAR @javax.jws.WebService () public class SubjectInfo { @javax.jws.WebMethod public String getSubjectInfo (String subjectID) { ... } @javax.jws.WebMethod public String [] getAllSubjects () { ... } } // Référencement du service à partir d'un client @WebServiceRef (wsdlLocation="http://xxx:8080/SubjectInfoService/SubjectInfo?wsdl") static SubjectInfoService service; // Recherche du "port" SubjectInfo subjectInfo = service.getSubjectInfoPort (); System.out.println(subjectInfo.getSubjectInfo ("S07")); M.Romdhani, INSAT, Octobre 2009 41 Développement de Web services Scénario de génération d'artéfacts Créer le service et le compiler Utiliser wsgen pour générer les artifacts Assembler dans un WAR/JAR et le déployer Utiliser wsimport pour générer les artifacts Coder le client Exécuter le client M.Romdhani, INSAT, Octobre 2009 42