ENSI
II2-SLE
Systèmes & Applications Répartis
Chapitre 5
LES WEB SERVICES
N. BEN AZZOUNA
Plan du cours
1. Généralités
Définitions /Motivations
Architecture
2.
Technologies
XML (Notions)
SOAP
WSDL
UDDI
3. Développement de web Services avec JAX-WS
4. Conclusions
SAR--Web Services
2
Evolution du Web
HTML
HTML
HTML, XML
HTML, XML
Generation 1 Static HTML
Generation 2 Web Applications
Generation 3 Web Services
SAR--Web Services
3
Evolution vers les web services
SAR--Web Services
4
Définition des Web Services
De multiples définitions de la notion de Web Services existent, mais sont
généralement trop vagues ou trop précises.
Un groupe de travail du W3C (Web Services Architecture group, composé de
multiples membres de l’industrie) en donne une définition exacte :
“A Web service is a software system designed to support interoperable
machine-to-machine interaction over a network. It has an interface
described in a machine-processable format (specifically WSDL). Other
systems interact with the Web service in a manner prescribed by its
description using SOAP messages, typically conveyed using HTTP with an
XML serialization in conjunction with other Web-related standards”
Source: W3C (http://www.w3.org/TR/ws-arch)
SAR--Web Services
5
Caractéristiques des Web Services
Un web service est un service qui...
... Peut être découvert et lié dynamiquement (bound)
... Modulaire et auto-descriptif
... Coopère à travers les interfaces
... Est faiblement couplé
... Est interopérable.
... Est adressable et localisable via le réseau.
... Peut être composé d’autres services.
SAR--Web Services
6
Caractéristiques des Web Services
Les clients de web services n’ont pas besoin de savoir
comment ils sont implémentés.
Application
client
Network
Web
Service
Application
program
SAR--Web Services
7
Motivations : un contexte B2C
SAR--Web Services
8
Motivations : un contexte B2B
SAR--Web Services
9
Motivations: intérêt des web services
XML est utilisé pour l’échange des données et messages.
Ils permettent l’intégration de plateformes hétérogènes via le protocole le
plus utilisé sur Internet (HTTP)
Indépendants des langages de programmation: Java, C, C++, Perl, Python,
C#, et/ou VB
Peu ou pas de modification des applications existantes
Permet une intégration faible, les composants sont simples mais peuvent
résoudre des problèmes complexes
L’utilisation du protocole HTTP permet de passer les pare-feux
Permet la localisation et l’invocation dynamique d’autres services
SAR--Web Services
10
Exemples de Web Services
Web service
http://live.capescience.com/ccx/GlobalWeather
Provides airport and flight weather information
Amazon Web Services (AWS & ECS)
http://www.amazon.com/webservices
Provide e-commerce services such as lookup of books
Google Web API
http://www.google.com/apis/
Guess ...
SAR--Web Services
11
Web Services & Service-Oriented Architecture
Service-Oriented Architecture –SOA
Comme son nom
l'indique, cette approche
la réorganisation des applications en ensembles fonctionnels appelés services. Un service n'est autre qu'une application exposée par le biais d'une interface standard telle que les web services
repose sur
SAR--Web Services
12
SOA
Pas nouvelle (2000-2001)
Permet l’interopérabilité de systèmes hétérogènes
Couplage faible ou mou entre les composants logiciels
Service = action exécutée par un «fournisseur» pour un «client»
Différence avec l’orienté objet:
Découplage données – mode de traitement
Ce n’est plus la «technique» qui dicte l’architecture, mais le «métier »
SAR--Web Services
13
Architecture distribuée vs. Architecture orientée service
SAR--Web Services
14
Architecture des Web Services : Roles & interactions
WSDL Service description
SAR--Web Services
15
Comparaison avec les solutions middleware
Les mêmes notions existent déjà dans RMI, Corba, EJB
SAR--Web Services
16
LES TECHNOLOGIES
SAR--Web Services
17
Technologies des Web Services (1/3) Standards de base
V. Annuaire / Publication
basé sur XML
IV. Description des méthodes
basé sur XML
III.
Échange de messages
basé sur XML
II.
I.
Protocole de transfert
Protocole de transport
SAR--Web Services
V
IV
III
II
I
18
Technologies des Web Services (2/3)
Les spécifications des Web Services sont définies en 3 modules:
Protocole SOAP: invocation distante des services web ( IIOP)
Basé sur XML
– Portabilité, Hétérogénéité
Porté sur des protocoles existants large échelle
– HTTP, SMTP, FTP, …
WSDL : Paradigme orienté service ( IDL)
Définition de services offerts (en XML)
UDDI: Enregistrement et découverte de services ( nameservice)
Référentiel de Web Service (Pages Jaunes, Vertes, Blanches)
SAR--Web Services
19
Technologies des Web Services (3/3)
SAR--Web Services
20
Introduction à XML - eXtensible Mark-up Language
Afin de bien comprendre le fonctionnement des services web, il est
important d’avoir quelques connaissances sur le langage XML et XML Schema.
XML est un langage balisé qui est rapidement devenu le standard pour
l’échange de données ;
Les données sont identifiées grâce à des tags (tout tag ouvert doit
impérativement être fermé) ;
A la différence de HTML, les tags XML identifient des données et non un
affichage. Exemple :
SAR--Web Services
21
Introduction à XML
Entre deux tags XML ouvert/fermé, se trouve un élément ; Un tag XML peut contenir d’autres tags, ce qui permet une représentation
hiérarchique des données ;
Un tag peut contenir un (voire plusieurs) attribut(s) (piste dans le tag titre de
l’exemple précédent) ;
Tous les tags ouverts doivent être fermés ; Un tag vide est valide (<prix euros='20' /> par exemple) ; Exemple de commentaires en XML : <!-- commentaire --> ; Un document XML commence par un prologue : <?xml version="1.0" encoding="ISO-8859-1" ?>
La notion d’espace de noms (namespace) est très utilisée dans les services
web.
Les namespaces permettent :
de qualifier de manière unique des éléments et des attributs ; la définition de balises modulaires.
SAR--Web Services
22
Introduction à XML
Exemple :Un magasin de disques et de livres peut caractériser son stock
par deux documents XML :
L’espace de nom (xmlns) permet de créer un nom unique pour chacune des balises <titre>, en associant un identifiant unique (URI, Uniform Ressource Indentifier) à un nom.
SAR--Web Services
23
Introduction à XML
SAR--Web Services
24
Introduction à XML Schema
XML Schema précise comment représenter en XML une structure de
données.
XML Schema définit les imbrications ainsi que les types des données
(éléments et attributs).
Ainsi, le XML Schema définissant l’exemple <livre> (simplifié) est :
SAR--Web Services
25
Le protocole SOAP –Simple Object Access Protocol
Publicité
SAR--Web Services
26
SOAP
SOAP 1.0 : 1999, basé sur HTTP SOAP 1.1 : 2000, plus générique, autres protocoles
SOAP 1.1 : http://www.w3.org/TR/2000/NOTE-SOAP-20000508/
SOAP 1.2 : recommandation W3C, 2007
SOAP 1.2 : http://www.w3.org/TR/soap12/ Indépendance du protocole de transport
Objectifs visés
Assurer la communication entre applications d’une même entreprise
(intranet)
Assurer les échanges interentreprises entre applications et services
Web
Pour comparaison, SOAP est similaire aux protocoles « RPC »
SAR--Web Services
27
Structure d’un message SOAP
Messages : « enveloppes » où l’application
met les données à transmettre Éléments XML avec des sous-
éléments
Un message SOAP peut être transmis à
plusieurs récepteurs intermédiaires avant d’être reçu par le récepteur final (~chaîne de responsabilité)
Le format SOAP peut contenir des
messages spécifiques correspondant à des erreurs identifiées par le récepteur
Structure
En-tête (optionnelle)
Niveau infrastructure
Corps (obligatoire)
Niveau application
SAR--Web Services
28
SOAP par l’exemple : Requête vers le service HelloWorld
SAR--Web Services
29
L’enveloppe SOAP
L’enveloppe est la racine d’un message SOAP identifiée par la balise
<soapenv:Enveloppe>
La spécification impose que la balise et les sous balises soient explicitement
associées à un namespace xsi correspond au namespace des types de données connus ; xsd correspond au namespace du schema du document ; soapenv correspond au namespace de l’enveloppe (utilisé pour la gestion de
la version SOAP).
La spécification SOAP définit deux namespaces par défaut
SOAP-ENV ou soapenv : http://schemas.xmlsoap.org/soap/envelope/ SOAP-ENC : http://schemas.xmlsoap.org/soap/encoding/
La requête et la réponse ont la même structure
SAR--Web Services
30
En-tête SOAP
L’en-tête d’un message SOAP est utilisé pour transmettre des informations
supplémentaires sur ce même message
L’en-tête est défini par la balise <SOAP-ENV:Header>
L’élément peut être facultatif Doit être placé avant le corps
Différents usages de l’en-tête ?
Informations authentifiant l’émetteur Contexte d’une transaction Pour certains protocole de transport (FTP par exemple), l’en-tête peut
être utilisé pour identifier l’émetteur du message
Un message SOAP peut transiter par plusieurs intermédiaires avant le
traitement par le récepteur final Pattern « Chaîne de responsabilité » Zone lecture / écriture par les intermédiaires
SAR--Web Services
31
En-tête SOAP
SAR--Web Services
32
Corps SOAP
Le corps d’un message SOAP est constitué par un élément
<SOAP-ENV:Body>
L’élément <SOAP-ENV:Body> peut contenir soit
Une erreur en réponse à une requête (élément <SOAP-
ENV:Fault>)
Des informations adressées au destinataire du message
SOAP respectant un encodage déterminé
L’encodage des informations est précisé par les bindings du
document WSDL Attribut style (Document et RPC) Attribut use (encoded et litteral)
SAR--Web Services
33
Style RPC ou DOC
SAR--Web Services
34
Corps SOAP
L’objectif visé par SOAP a été de fournir un mécanisme standardisé pour
l’appel de procédures distant (RPC)
De ce fait les informations adressées au destinataire de messages SOAP
doivent respecter un certain nombre de conventions
Appel d’une opération représentée par une struct
Le nom de la structure est celui de l’opération à appeler Chaque paramètre de l’opération est défini comme un sous élément
de la structure
Si un paramètre est un type complexe (Person par exemple) une
nouvelle structure est définie contenant à son tour des sous éléments …
Le résultat est également représenté par une struct
Le nom de la structure est celui de l’opération suivi de Response
Les paramètres sont également structurés
SAR--Web Services
35
Corps SOAP Exemple : corps de messages SOAP pour appeler des opérations du service
Web Notebook
SAR--Web Services
36
Corps SOAP
Exemple : corps de messages SOAP pour le résultat des
opérations du service Web Notebook
SAR--Web Services
37
Corps SOAP
Dans le cas où des données binaires devraient transiter
(comme une image par exemple), il est également possible d’envoyer un message SOAP avec attachement et ce grâce à un message MIME (Multimedia Internet Mail Extension).
Pour pouvoir référencer une pièce jointe depuis le corps du message SOAP, une URI est utilisée, faisant référence à la pièce jointe.
SAR--Web Services
38
Synchrone ou Asynchrone
SAR--Web Services
39
SOAP transporté par HTTP
SOAP utilise un protocole de transport pour véhiculer les messages SOAP
de l’émetteur au récepteur HTTP, SMTP, FTP, POP3 et NNTP
Le modèle requête/réponse de SOAP convient parfaitement au modèle
requête/réponse HTTP
SAR--Web Services
40
SOAP transporté par HTTP
Requête SOAP HTTP
Méthode de type GET ou POST GET : la requête n’est pas un
message SOAP, seule la réponse l’est,
POST : requête et réponse sont
des messages SOAP,
Nécessite un attribut SOAPAction
Réponse SOAP HTTP
Exploite les codes retours HTTP Si code de type 2xx, message
SOAP reçu
Si code 500, message en erreur,
le corps SOAP doit contenir fault
SAR--Web Services
41
Pourquoi utiliser HTTP ?
HTTP (HyperText Transfer Protocol): le protocole de communication de
l’Internet, est devenu un standard de facto
HTTP est disponible sur toutes les plateformes – très rapidement
HTTP est un protocole simple, qui ne requiert que peu de support pour
fonctionner correctement
HTTP est un protocole sans connexion
Peu de paquets sont nécessaires pour échanger des informations
HTTP offre un niveau de sécurité simple et effectif
HTTP est le seul protocole utilisable à travers des pare-feux
SAR--Web Services
42
Fonctionnement d’HTTP
HTTP utilise un protocole requête/réponse basé sur du texte
La première ligne de la requête contient 3 éléments:
Verbe : POST/GET/HEAD
URI : /default.htm
Protocole : HTTP/1.0 - HTTP/1.1
La première ligne de la réponse contient 2 éléments:
État : 200, 4xx, 500,
Différents états existent. Les principaux sont : 200 (ok), 400 (mauvaise requête),
403 (client non autorisé), 404 (document inexistant), 500 (erreur d’exécution –sur le serveur).
Phrase : OK, Unauthorized
Les lignes suivantes contiennent un nombre arbitraire d’entête
Le “contenu” suit une ligne d’entête vide
Utilisé essentiellement pour les réponses et pour les requêtes POST
SAR--Web Services
43
Principales méthodes HTTP
SAR--Web Services
44
Traitement des messages SOAP
SAR--Web Services
45
SOAP : encodage/décodage des données
Un message SOAP contient des données, dont il faut pouvoir déterminer la valeur
Encodage : donnée vers représentation XML Décodage : représentation XML vers donnée Encodage et décodage sont définis de diverses façons
en général, via schéma XML
SAR--Web Services
46
SOAP UI : outil graphique de tests de Service Web
SOAP UI est un outil pour tester des Services Web
www.soapui.org Disponible pour en standalone ou intégré dans les environnements de
développement (Eclipse, Intellij, Netbeans, Maven, …)
Peut s’utiliser pour n’importe quelle plateforme de développement
Fonctionnalités de SOAP UI
Supporte les Services Web étendus (WSDL + SOAP + UDDI) ou REST Inspecter des Services Web Invoquer des Services Web Développer des Services Web Simuler des Services Web via des bouchons (mocks) Effectuer des tests qualités (temps de réponse, …)
SAR--Web Services
47
SOAP UI : outil graphique de tests de Service Web
SAR--Web Services
48
WSDL –Web Service Description Language
Spécification (09/2000)
Ariba, IBM, Microsoft
TR W3C v1.1 (25/03/2001)
Objectif:
Décrire/définir
les services comme un ensemble d’opérations et de
messages abstraits relié (bind) à des protocoles et des serveurs réseaux
Grammaire XML (schema XML)
Modulaire (import d’autres documents WSDL et XSD)
Séparation entre la partie abstraite et concrète
SAR--Web Services
49
WSDL –Web Service Description Language
WSDL (Web Service Description Langage), est un langage de description de
services web en XML.
Spécification (09/2000)
Ariba, IBM, Microsoft
TR W3C v1.1 (25/03/2001)
Il décrit :
Les informations sur les fonctions publiques du service web ; Les types de données utilisés durant l’échange de messages ; Les différents protocoles aux travers desquels le service est accessible ; et
comment y accéder ;
Une adresse permettant de localiser le service web.
Séparation entre la partie abstraite et concrète
WSDL pourrait décrire n’importe quel protocole de messagerie basé sur XML. Les documents WSDL ne sont jamais générés par des développeurs, mais le sont grâce à des outils qui automatisent la tâche (par exemple, il existe des outils qui prennent une classe Java et qui créent le WSDL correspondant).
SAR--Web Services
50
Structure d’un document WSDL
Publicité
portType
SAR--Web Services
51
Exemple de document WSDL
SAR--Web Services
52
Éléments d’une définition WSDL
<types>
Contient les définitions de types utilisant un système de typage (XSD).
<message>
Décrit les noms et types d’un ensemble de champs à transmettre
Paramètres d’une invocation, valeur du retour, …
<porttype>
Décrit un ensemble d’opérations. Chaque opération a zéro ou un message en
entrée, zéro ou plusieurs message de sortie ou erreur
<binding>
Spécifie une liaison d’un <porttype> à un protocole concret (SOAP1.1, HTTP1.1, MIME, …). Un <porttype> peut avoir plusieurs liaisons !
<port>
Spécifie un point d’entrée (endpoint) comme la combinaison d’un <binding> et
d’une adresse réseau.
<service>
Une collection de points d’entrée (endpoint) relatifs.
SAR--Web Services
53
Élément <types> --Exemple
Description en utilisant XML Schema (XSD).
<!-- type defs --> <types> <xsd:schema targetNamespace="urn:xml-soap-address-demo"
xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<xsd:complexType name="phone">
<xsd:element name="areaCode" type="xsd:int"/> <xsd:element name="exchange" type="xsd:string"/> <xsd:element name="number" type="xsd:string"/> </xsd:complexType> <xsd:complexType name="address"> <xsd:element name="streetNum" type="xsd:int"/> <xsd:element name="streetName" type="xsd:string"/> <xsd:element name="city" type="xsd:string"/> <xsd:element name="state" type="xsd:string"/> <xsd:element name="zip" type="xsd:int"/> <xsd:element name="phoneNumber" type="typens:phone"/> </xsd:complexType> </xsd:schema> </types>
SAR--Web Services
54
Élément <porttype>
Décrit un ensemble d’opérations. Plusieurs types d’opérations
One-way (Unidirectionnel)
Le point d’entrée reçoit un message (<input>).
Request-response
Le point d’entrée reçoit un message (<input>) et retourne un message corrélé
(<output>) ou un ou plusieurs messages de faute (<fault>).
Solicit-response
Le point d’entrée envoie un message (<output>) et recoit un message corrélé
(<input>) ou un ou plusieurs messages de faute (<fault>).
– Binding HTTP : 2 requêtes HTTP par exemple
Notification
Le point d’entrée envoie un message de notification (<output>)
Paramètres
Les champs des messages constituent les paramètres (in,out, inout) des opérations SAR--Web Services 55
Web services: Toolkits
Java
JAX-WS - https://jax-ws.java.net/
Axis – http://ws.apache.org/axis/
Jdeveloper - http://www.oracle.com/technology/software/products/jdev
PHP
NuSOAP – http://sourceforge.net/projects/nusoap/
ASP
MS .Net (Visual Studio) – http://www.microsoft.com/net/default.mspx
SAR--Web Services
56
Outils
Des outils pour construire un document WSDL
Notepad++ (éditeur de texte puisqu’il s’agit d’XML) Eclipse JavaEE Netbeans Visual Studio … (tous les environnements de développement qui manipulent les
Services Web)
Des outils pour valider un document WDSL
www.validwsdl.com
Des outils pour manipuler un WSDL
SOAPUI
SAR--Web Services
57
Génération WSDL
SAR--Web Services
58
UDDI –Universal Description, Discovery and Integration
UDDI (Universal Description, Discovery and Integration) est un standard ayant
pour but la création d’un annuaire distribué de services web.
Cet annuaire contient :
Pages jaunes
Fournisseurs de services (catégorie)
Catégorisation industrielle
<nom de la société, adresse>
Pages blanches
Fournisseurs de services (nom)
Pages vertes
Définition des services fournis
– (processus métier, description de service….)
SAR--Web Services
59
Le modèle de données UDDI
Interface
Implementation
<tModel>
<businessEntity>
<businessService> <businessService>
<bindingTemplate> <bindingTemplate>
<businessService>
<tModel>
<bindingTemplate>
SAR--Web Services
60
Le modèle de données UDDI
BusinessEntity : pages blanches
décrivent les organisations ayant publié des services dans le répertoire.
nom de l'organisation, ses adresses (physiques et Web), des éléments de
classification, une liste de contacts, ...
BusinessService : pages jaunes
décrivent de manière non technique les services proposés par les différentes
organisations.
le nom et la description textuelle des services ainsi qu'une référence à
l'organisation proposant le service et un ou plusieurs « bindingTemplates ».
BindingTemplate : coordonnées des services
la définition du « point d'accès » (suivant les cas, une URL, un numéro de
téléphone, ...) et les éventuels « tModels » associés.
tModel : description technique des services
C'est à ce niveau que WSDL intervient comme le vocabulaire de choix pour
publier des descriptions techniques de services.
SAR--Web Services
61
UDDI : <tModel>
<tModel> représente des méta-données et des interfaces
<tModel xmlns="urn:uddi-org:api" tModelKey="UUID:AAAAAAAA-
AAAA-AAAA-AAAA-AAAAAAAAAAAA">
<name>microsoft-com:creditcheck</name> <description xml:lang="en">Check credit
limits</description>
<overviewDoc> <overviewURL>http://schema.com/creditcheck.wsdl </overviewURL> </overviewDoc> <categoryBag> <keyedReference tModelKey="UUID:CD153257-086A-4237-B336-6BDCBDCC6634" keyName="Consumer credit gathering or reporting
services"
keyValue="84.14.16.01.00"/> <keyedReference tModelKey="UUID:C1ACF26D-9672-4404-9D70-39B756E62AB4" keyName="types" keyValue="wsdlSpec"/> </categoryBag> </tModel>
SAR--Web Services
62
<bindingTemplate>
<bindingTemplate serviceKey="33c3d124-e967-4ab1-
8f51-d93d95fac91a" bindingKey="48f2bc6b-a6de-4be8- 9f2b-2342aeafaaac">
<accessPoint URLType="http">
http://localhost/HelloWorld/Service1.asmx
</accessPoint> <tModelInstanceDetails> <tModelInstanceInfo tModelKey="uuid:64c756d1-
3374-4e00-ae83-ee12e38fae63“/>
</tModelInstanceDetails> </bindingTemplate>
SAR--Web Services
63
L'interface UDDI
définie sous forme de documents UDDI et implémentée sous forme de Service
Web SOAP.
Elle est composée des modules suivants :
Interrogation (« inquiry ») permet de rechercher des informations dans un répertoire UDDI et de lire les différents enregistrements enregistrés suivant le modèle de données UDDI.
Publication permet de publier des informations dans un répertoire UDDI
conformément à son modèle de données.
Sécurité utilisée pour obtenir et révoquer les jetons d' authentification
nécessaires pour accéder aux enregistrements protégés dans un annuaire UDDI.
Contrôle d'accès et propriété (« custody and ownership transfer ») permet
de transférer la propriété d' informations et de gérer les droits d'accès associés.
Abonnement (« Subscription ») permet à un client de s'abonner à un
ensemble d' informations et d'être avertis lors des modifications de ces informations.
Réplication interne (noeuds d'un même annuaire) UDDI définit également
l'interface permettant de synchroniser les nœuds d'un même annuaire UDDI.
SAR--Web Services
64
UDDI
L’UDDI Business Registry est une implémentation complète des
spécifications UDDI. Lancée en mai 2001 par Microsoft et IBM, elle permet maintenant à quiconque d’y chercher des informations et aux sociétés de s’enregistrer.
UDDI repose sur une architecture distribuée comparable à celle des
serveurs DNS.
En guise d’exemple :
http://uddi.microsoft.com ; http://www.ibm.com/services/uddi.
L’annuaire UDDI est accessible via des messages SOAP à base de XML
SAR--Web Services
65
Relation entre WSDL et UDDI
L’interface du service tmodel
L’implémentation du service -> Business Service
SAR--Web Services MCAR --Web Services
66
Développement de services Web
JAX-WS
Généralités - Développement de Services Web
Nous nous intéressons dans ce cours au développement des services Web
Côté Serveur : code pour le traitement du service Web Côté Client : code qui permet d’appeler un service Web
La majorité des langages de programmation orientés Web supportent le
développement de services Web Java, PHP, C#, C++, …
Nous nous limitons au langage Java dans ce cours Différents frameworks de développement de Services Web
JAX-WS Specification Sun (jax-ws.dev.java.net) AXIS 1 et 2 Apache (ws.apache.org/axis et ws.apache.org/axis2) CXF Apache (cxf.apache.org) XFire Codehaus (xfire.codehaus.org) JBossWS JBoss (www.jboss.org/jbossws)
SAR--Web Services
68
Généralités JAX-WS
JAX-WS est l’acronyme Java API for XML Web Services
JAX-WS est à la fois un standard et une implémentation
La version courante est JAX-WS 2.0, précédemment JAX-WS
s’appelait JAX-RPC
JAX-WS s’appuie sur un ensemble de JSR
JSR 224 : JAX-WS JSR 181 : Web Services Metadata JSR 222 : JAXB JSR 250 : Common Annotations
SAR--Web Services
69
Généralités JAX-WS
L’implémentation de référence est fournie par METRO
appelée également JAX-WS RI (Reference Implementation) Site projet Metro : https://metro.dev.java.net/
L’implémentation JAX-WS est intégrée nativement à la JRE
depuis la version 6
Il est possible de développer des Services Web en dehors
d’un serveur d’application en mode autonome
SAR--Web Services
70
Généralités JAX-WS
Le développement de Services Web avec JAX-WS est basé sur des POJO
(Plain Old Java Object)
Les fonctionnalités de base pour le développement de Web Services avec
JAX-WS requiert simplement l’utilisation d’annotations Java
Par conséquent aucun fichier de déploiement n’est requis
Toutefois, les fonctionnalités avancées (appels asynchrones) nécessitent
d’utiliser une API
JAX-WS permet d’assurer l’indépendance du protocole (SOAP) et du
transport (HTTP)
SAR--Web Services
71
Publicité
Comment développer un web service JAX-WS
SAR--Web Services
72
Généralités JAX-WS
SAR--Web Services
73
Développement Serveur : généralités
Deux façons pour développer un Service Web avec JAX-WS
Approche Top / Down (à partir d’un document WSDL)
Génération des différentes classes Java (JAXB et squelette
du Web Service) en utilisant l’outil wsimport
Compléter le squelette de classes de l’implémentation Compiler, déployer et tester
Approche Bottom / Up (à partir d’un POJO)
Créer et annoter un POJO Compiler, déployer et tester Le document WSDL est automatiquement généré
SAR--Web Services
74
Développement Serveur :Bottom /Up
SAR--Web Services
75
Développement Serveur :Bottom /Up
L’approche Bottom / Up consiste à démarrer le développement à partir
d’une classe Java (POJO)
Ajouter l’annotation @WebService
Déployer l’application sur un serveur d’application (ou via directement
Java SE 6)
Le document WSDL est généré automatiquement en respectant les
valeurs par défauts URL du WSDL : http://monserveur/app/Service?WSDL
Toutes les méthodes du POJO sont des opérations du Web Service
La surcharge de méthodes n’est pas supportée
SAR--Web Services
76
Développement Serveur :Bottom /Up
Exemple : Implémentation du Service Web HelloWorld
SAR--Web Services
77
Développement Serveur :Bottom /Up
Exemple (suite) : Implémentation du Service Web HelloWorld
SAR--Web Services
78
Développement Serveur :Bottom /Up
Exemple : Paramétrer le Service Web HelloWorld
SAR--Web Services
79
Développement Serveur :Bottom /Up
Exemple (bis) : Paramétrer le Service Web HelloWorld
SAR--Web Services
80
Développement Serveur :Bottom /Up
Comme indiqué précédemment, la JRE 6 fournit des API et des outils pour
manipuler des Services Web
L’outil wsgen génère des artifacts (JAXB, WSDL) à partir de classes Java
annotées via JAX-WS
L’utilisation de cet outil n’est pas obligatoire puisque cette génération est
implicite lors de l’exécution
Exemples d’utilisation
SAR--Web Services
81
JAXB - Java Architecture for XML Binding
JAXB est une spécification qui permet de faire correspondre un document XML à un ensemble de classes et vice versa au moyen d'opérations de sérialisation/désérialisation nommées marshaling/unmarshaling.
La manipulation du document XML se fait en utilisant des objets
précédemment générés à partir d'une DTD pour JAXB 1.0 et d'un schéma XML du document à traiter pour JAXB 2.0.
SAR--Web Services
82
Principe de JAXB
SAR--Web Services
83
Générer XML à partir des objets java avecJAXB
SAR--Web Services
84
Générer des objets java à partir de XML avec JAXB
SAR--Web Services
85
Générer un schéma XML à partir d’une classe avec JAXB
SAR--Web Services
86
Génération des classes à partir d’un schéma XML
SAR--Web Services
87
Quelques annotations
SAR--Web Services
88
Développement Serveur :Bottom /Up
Un Service Web est déployé dans une application Web (un Service Web par
application Web)
Différentes catégories de serveur d’application pour gérer les Services Web
avec JAX-WS Conteneur respectant JSR 109 (Implementing Entreprise Web Services) La gestion du Service Web est transparente et maintenue par le
serveur d’application
Exemple : Glassfish http://jcp.org/en/jsr/summary?id=109 Conteneur nécessitant une gestion par Servlet
Nécessite une configuration explicite du Service Web Exemple : Tomcat Note : un composant additionnel se propose de fournir le support JSR
109 (http://tomcat.apache.org/tomcat-6.0-doc/extras.html)
SAR--Web Services
89
Développement Serveur :Top /Down
SAR--Web Services
91
Développement Serveur :Top /Down
L’approche Top / Down consiste à démarrer le développement à partir d’un
document WSDL
Le document WSDL est accessible via une URL ou via un fichier physique
Utilisation explicite de l’outil wsimport pour la génération du squelette du
Service Web Génération des classes liées à JAXB Génération des interfaces WS (interface décrivant le PortType)
Création d’un POJO annotée @WebService en précisant l’emplacement de
l’interface du portType (Proxy)
Déployer l’application sur un serveur d’application
Le reste du processus de développement est identique à celui de l’approche
Bottom / Up
SAR--Web Services
92
Service Web avec Java 6 : généralités
Le développement serveur est possible directement à partir de Java SE 6 puisqu’il intègre un serveur Web embarqué Inutile de gérer un serveur Web (Tomcat, Glassfish) Le déploiement est immédiat
Les deux approches (Top / Down et Bottom / Up) sont
applicables à ce mode de développement
Usages
Fournir des Services Web à une application type client
lourd
Pour les tests unitaires, fournir des Mock de Services Web
SAR--Web Services
93
Service Web avec Java 6 : serveur
Développer une classe Java implémentant le Service Web (ou
à partir d’un WSDL et en utilisant wsimport)
Ajouter l’annotation @WebService Créer explicitement une instance du POJO Publier le Service Web par l’intermédiaire de la méthode
Le document WSDL est généré automatiquement à
l’exécution de l’application
URL du WSDL : http://monserveur/service?WSDL Toutes les méthodes du POJO sont des opérations du Web
Service
SAR--Web Services
94
Service Web avec Java 6 : serveur
La méthode publish est utilisée pour démarrer la publication du
Service Web String adresse : adresse de déploiement du Service Web depuis
le serveur Web embarqué (http://localhost:8080/ws)
Object implementor : instance de l’implémentation du Service
Web
Différentes méthodes proposées par la classe Endpoint (type de
retour de la méthode publish) boolean isPublished() : vérifie si le service est en publication void stop() : arrête la publication du Service Web
SAR--Web Services
95
Service Web avec les EJB : généralités A partir d’un EJB Session, il est possible de définir le POJO associé
comme étant un Service Web
Pour rappel, l’appel à un EJB Session passe obligatoirement par un
client écrit en Java
Les avantages à transformer un EJB Session en Service Web
Caractéristiques des EJBs (transactions, sécurité, scalabilité, …) Plus grande hétérogénéité, le client n’est pas forcément écrit en
Java
Réutilisabilité du code Modularité (avec les annotations JAXB possibilité de masquer les
méthodes qui ne doivent pas être découvertes)
Nécessite d’avoir un conteneur EJB pour le déploiement
Glassfish, OpenEJB, …
SAR--Web Services
96
Service Web avec les EJB :serveur
Partir d’une classe Java définissant un EJB Session (statefull ou stateless)
Ajouter l’annotation @WebService
Déployer l’application sur un serveur d’application ayant le support EJB
(Glassfish par exemple)
Le conteneur EJB s’occupe de la gestion du Service Web, aucune Servlet
n’est nécessaire
Le document WSDL est généré automatiquement en respectant les valeurs
par défaut URL du WSDL : http://monserveur/app/Service?WSDL
Toutes les méthodes de l’EJB sont par défaut des opérations du Service Web
SAR--Web Services
97
Développement Client Java
SAR--Web Services
98
Développement Client Java
Le développement du client consiste à appeler des opérations du Service
Web à partir d’un programme Java
Le client peut être une application développée
Java SE (Swing, Eclipse RCP) Java EE avec les EJB (JSP, Servlet, …)
Possibilité de générer des appels aux Services Web de manière synchrone
et asynchrone
Le développeur ne manipule que du code Java, le code XML est caché
(JAXB)
SAR--Web Services
99
Développement Client Java : Exemple
SAR--Web Services
100
Service Web avec les EJB : client
Le développement du client est similaire au client développé
précédemment où le point de départ est le document WSDL (via une URL ou via un fichier physique)
Utilisation explicite de l’outil wsimport pour la génération du squelette du
Service Web Génération des classes liées à JAXB Génération de classes Service Web (PortType et Service)
Injecter un @WebServiceRef pour récupérer une instance du Service à
partir du conteneur EJB
Récupération d’un port via get<ServiceName>Port()
Invocation des opérations
SAR--Web Services
101
Annotations : généralités
JAX-WS repose sur l’utilisation massive d’annotations pour la
configuration d’un Service Web
JSR utilisées (JSR 224, 222, 181 et 250)
Les principales annotations sont les suivantes
@WebService : POJO implémentant un Service Web @WebMethod : Paramétrer une opération @WebParam : Paramétrer un message @WebResult : Paramétrer un message de sortie @WebFault : Paramétrer un message fault
A noter que seule l’utilisation de l’annotation @WebService est
nécessaire (utilisation de valeurs par défaut)
SAR--Web Services
102
Annotations :@WebService
Annote une classe Java pour définir l’implémentation du Service
Web
Annote une interface Java pour définir la description du Service
Web
Attributs de l’annotation @WebService String name : nom du Service Web String endpointInterface : nom de l’interface décrivant le
Service Web
String portName : nom du port String serviceName : nom du service du Service Web String targetNamespace : l