M2 SID
Développement avec
l’Approche
Web Services
USTO-MB- 2024-2025 Mme L . BAGDADI
Sommaire
Chapitre 1 : Introduction aux Web Services
1.1. Evolution des architectures applicatives
1.2. Le langage XML, DTDs , XSDs et name space
Chapitre 2 : Les web services SOAP
2.1. Principe de fonctionnement
2.2. Le protocole SOAP
2.3. Le langage WSDL
2.4. L'annuaire UDDI
2.5. JAX-WS
2.5.1. Approche Bottom-Up (Code First)
2.5.2. Approche Top-Down (Code Last)
2.6. Exemple d’application (client AJAX/ SOAP Web service )
Chapitre 3 : Les web services REST
3.1. Principe de fonctionnement
3.2. CRUD (Create, Read, Update, Delete)
3.3. JAX-RS
3.5. Exemple d’application JAX-RS (client AJAX/ REST Web service )
01 Chapitre 1 :
Introduction
01 Introduction
L’évolution des architectures réparties
Distributed Web Service-oriented
architecture
Technology SOAP-WS,REST-WS
component-oriented
architecture
CCM,EJB, DCOM
Object-oriented
architecture
ORB,RMI
Procedure oriented
architecture
RPC
1970
1990 2000
period
RPC : Remote Procedure Call RMI : Remote Method Invocation EJB : Entreprise Java Beans
ORB : Object Request Broker CCM : Corba Component Model DCOM : Distributed Component Object Model
5/43
01 Introduction
L'essor des Services Web fait l'objet aujourd'hui
d'un réel engouement. En effet, les applications
reposant sur le modèle architectural SOA (Service
Oriented Architecture) , qui requièrent des Web
Services, assurent flexibilité et réactivité des SI
grâce à la mise en œuvre de services basés sur les
standards du web complètement indépendants mais
interopérables
6/43
01 Introduction
Notons que d'autres architectures réparties telles que :
RPC : architecture orientée procédure
RMI, CORBA (ORB) : architecture orientée objet
DCOM, EJB, CORBA (CCM) : architecture orientée
composant
ont précédemment été adoptées (voir schéma de
l’évolution des architectures réparties ) mais ont
généralement échoué en raison de l’hétérogéneité des
plates-formes et aussi parce que leur usage n'était pas
conforme aux standards du web.
7/43
01 Introduction aux Services Web
Les services Web
Des systémes logiciels permettant à des applications de
dialoguer via Internet indépendamment des plates-formes et
des langages sur lesquelles elles reposent.
S'appuient sur un ensemble de protocoles Internet très
répandus afin de communiquer(HTTP, XML, SOAP.....).
8/43
01 Le langage de description XML
Un langage de balisage extensible dérivé du
langage SGML standardisé par le consortium W3C.
Un format d’échange de données entre des
applications.
Il permet de structurer les données.
Auto-descriptif et extensible.
9/43
01 Le langage de description XML
HTML XML
Affiche les données par Décrit, stocke, transporte et
l'intermédiaire d'un navigateur échange les données
Extensible : permet de créer
Les balises sont figées ses propres balises
Pas autodescriptif Autodescriptif
Langage statique de publication Métalangage qui permet de
sur le web créer des langages
10/43
01 Le langage de description XML
prologue <?xml version= "1.0" encoding="UTF-8" standalone="yes" ?>
Commentaire <!--Cet exemple illustre la structure d’un documentxml -->
<bibliotheque>
<livre categorie="java" >
<auteur>Doudoux</auteur> Élément livre
Élément racine <titre>Développons en java</titre> emboité dans
<pages>1770</pages> l’élément racine
</livre>
Attribut
<livre categorie="web services" >
<auteur>Richardson</auteur>
<titre>RESTfull web services</titre>
<pages>448</pages>
</livre>
</bibliotheque>
11/43
01 Syntaxe d’un document XML
Les régles de nommage des éléments et des attributs
1. Le XML respecte la casse (Livre≠ livre)
2. Le nom d’un élément ou d’un attribut doit commencer
par une lettre. Il ne doit ni commencer, ni contenir : Un
blanc, #, et les cinq caractéres spéciaux <, >, ', ", &
3. Les valeurs des attributs doivent être délimitées par " ou '.
Les caractéres spéciaux (entités) :
> < " ' &
> ; < ; " ; &apos ; & ;
12/43
01 Un document XML bien formé
Un document XML bien formé est un document dont la syntaxe est
conforme aux régles suivantes :
1. Le prologue doit être renseigné en précisant la version du XML.
2. Le document XML ne doit posséder qu'une seule balise racine.
3. Le nom des balises et des attributs doit être conforme aux règles
de nommage.
4. Les balises en paires doivent être correctement fermées.
5. Les valeurs des attributs doivent être mises entre guillemets
simples ou doubles.
6. Les balises du document XML ne doivent pas se chevaucher.
13/43
01
Well formed XML File
Un document XML bien formé
14/43
01 Well formed XML File
Un document XML bien formé
Exemple d’utilisation de la commande xmllint qui permet de
vérifier si un document xml est bien formé ou non
Document xml bien formé Document parsé sans erreurs
Document xml mal formé Message d’erreur du parser xmllint
15/43
01 Les DTDs (Document Type Definition)
Une DTD est une grammaire que doit respecter un document xml
(l'organisation du document)
Elle permet de :
structurer un document xml
specifier les éléments du document XML, et leur ordre
d'apparition.
spécifier pour chaque élément les attributs obligatoires et ceux
optionnels.
16/43
01 Les DTDs
La DTD contient la description des éléments et des attributs du
document XML
Syntaxe : <!ELEMENT element_name (Type)>
Type Syntaxe Explication
EMPTY <!ELEMENT element_name EMPTY> Contenu vide
ANY <!ELEMENT element_name ANY> N’importe quel contenu
PCDATA <!ELEMENT element_name (#PCDATA)> Contenu de type chaine de
caractéres
séquence <!ELEMENT element_name (elem1, Séquence d’éléments
elem2, ...etc)>
choix <!ELEMENT element_name (elem1| elem2)> Élément au choix
Contenu- <!ELEMENT element_name (#PCDATA | elem1)*> Contenu hybride
mixte
17/43
01 Le nombre d’occurences dans les DTDs
Occurrence Signification Exemple
* zero ou <!ELEMENT elem (elem1 ,elem2 )*>
plusieurs fois
+ Une ou <!ELEMENT elem (elem1 ,elem2 )+>
plusieurs fois
? Zero ou une <!ELEMENT elem (elem1 ,elem2 )?>
seule fois
Your Date
18/43
01 Les attributs DTDs
Syntaxe : <!ATTLIST [element_name] [attribute_name] [Type] [Default]>
Type Syntaxe
CDATA <!ATTLIST element_name attribute_name CDATA "default">
NMTOKEN <!ATTLIST element_name attribute_name NMTOKEN "default">
Liste de <!ATTLIST element_name attribute_name (val1 | val2|….valn)>
valeurs
ID <!ATTLIST element_name attribute_name ID ... >
IDREF <!ATTLIST element_name attribute_name IDREF>
Default Signification
#REQUIRED Attribut obligatoire
#IMPLIED Attribut optionnel
#FIXED "fixed Attribut à valeur fixe
Value"
19/43
01 DTD Interne
Une DTD peut être définie à l’intérieur d’un fichier XML : DTD interne
<?xml version= "1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE CARNETADRESSE [
Racine du Le carnet d’adresse
<!ELEMENT CARNETADRESSE (PERSONNE)*>
document xml contient 0 ou
<!ELEMENT PERSONNE (nom, prenom, email)>
<!ELEMENT nom (#PCDATA)> plusieurs personnes
<!ELEMENT prenom (#PCDATA)>
<!ELEMENT email (#PCDATA )> Une personne est
<!ATTLIST PERSONNE nss ID #REQUIRED> définie par son, son
]> prenom et son email
<CARNETADRESSE>
<PERSONNE nss=":123">
<nom>aaa</nom>
<prenom>BBB</prenom>
<email>aaa@[Link]</email>
</PERSONNE>
</CARNETADRESSE>
20/43
01 DTD Externe
ou dans un fichier externe d’extension .dtd : DTD externe
<?xml version= "1.0" encoding="UTF-8" standalone="no" ?>
<!DOCTYPE CARNETADRESSE SYSTEM "[Link] " >
Document Le nom du
XML <CARNETADRESSE>
<PERSONNE nss=":123"> fichier dtd
<nom>AAA</nom>
<prenom>BBB</prenom>
<email>eee@[Link]</email>
</PERSONNE>
</CARNETADRESSE>
[Link] <?xml version= "1.0" encoding="UTF-8" ?>
<!ELEMENT CARNETADRESSE (PERSONNE)*>
<!ELEMENT PERSONNE (nom, prenom, email)>
<!ELEMENT nom (#PCDATA)>
<!ELEMENT prenom (#PCDATA)>
<!ELEMENT email (#PCDATA )>
<!ATTLIST PERSONNE nss ID #REQUIRED>
21/43
01 Well formed XML File
DOCUMENT XML VALIDE
Les commandes de vérification que le document [Link] est valide
par rapport à la dtd [Link] en utilisant le parser XMLLint :
xmllint --valid [Link] ou
xmllint --dtdvalid [Link] [Link]
22/43
01 Exemple d’énumération d’attribut
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE etudiant [
<!ELEMENT etudiant EMPTY>
<!ATTLIST etudiant
cycle (licence|master) #REQUIRED
nEtu CDATA "001">
]>
<etudiant cycle="licence"/>
[Link]
23/43
01 Exemple de définition d’entité
<?xml version = "1.0" encoding = "UTF-8" standalone = "no"?>
<!DOCTYPE address SYSTEM "[Link]" [
<!ENTITY name "Your name">
<!ENTITY company "Name Company">
<!ENTITY phone_no "(011) 123-4567">
<!ENTITY email "enseignant@[Link]">
]>
<address>
<name>&name;</name>
<company>&company;</company>
<phone_no>&phone_no;</phone_no>
<email>&email;</email>
</address>
[Link]
24/43
01 DOCUMENT XML VALIDE
Un document XML est valide selon le W3C :
1. S’il est bien formé
2. S’il est conforme aux règles d'un modèle (ou schéma) de
documents décrit par une DTD (Document Type Definition)
ou un XSD (XML Schema Definition).
25/43
01 Les XSDs (XML Schema Description)
Les schémas XML (XSD) permettent comme les DTDs de
définir des modèles de documents.
Les XSDs ont été introduits pour combler les lacunes des DTDs :
DTD Syntaxe non XML
Absence des types de données
Pas de gestion d’espace de nommage
26/43
01 Les XSDs (XML Schema Description)
XSD Syntaxe XML
Nombreux types prédéfinis (String, bool,
int, date, float.…)
Possibilité de définir de nouveaux types
Gestion d’espace de nommage
27/43
01 Les XSDs
Document XML Vocabulaire (espace de nommage)
Les espaces de noms ont été introduits en XML afin de
pouvoir mélanger plusieurs vocabulaires au sein d'un même
document.
Comme en java, les conflits entre noms de classes sont
évités en les préfixant par le nom du package aux quelles elles
appartiennent. Par exemple, [Link]; et [Link];
font référence à deux classes différentes, arraylist pour la
première et liste déroulante pour la deuxième.
28/43
01 Les XSDs
Cet exemple illustre une situation de conflit entre les balises
nom et adresse si on souhaite fusionner les deux
documents xml
<?xml version="1.0" ...?>
<universite>
<nom>Universite USTO-MB</nom>
<adresse>EL-MENOUAR Oran</adresse>
</universite>
<?xml version="1.0" ...?> Conflit
<etudiant>
<nom>Mohamed</nom>
<adresse>Bir El-Djir</adresse>
</etudiant>
29/43
01 Les XSDs
Les name spaces
Solution : pour lever le conflit, les vocabulaires distincts sont
préfixés par leur URI (on utilise généralement les URLs)
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<a:universite xmlns:a="[Link] >
<a :nom>Universite USTO-MB</a :nom>
<a :adresse>BP1505 EL-MENOUAR Oran</a :adresse>
<b :etudiant xmlns:b="[Link] >
<b :nom>Mohamed</b :nom>
<b :adresse>Mohamed</b :adresse>
</b :etudiant>
</a :universite>
30/43
01 Les XSDs
Exmple d’un fichier XML et son fichier XSD
[Link]
Prologue <?xml version="1.0" encoding="UTF-8"?>
<xsd:schema Racine
préfixe
xmlns:xsd="[Link] Élément
<xsd:element name="nom" type="xsd:string"/> nom de
</xsd:schema> type string
<?xml version="1.0" encoding="utf-8" ?>
<nom>
Mohamed [Link]
</nom>
31/43
01 Les XSDs
Les éléments simples : les éléments primitifs
En XSD, on distingue les éléments simples et les éléments
complexes. Parmi les les éléments simples, on trouve quatre types :
primitif, restriction, union et liste.
Éléments primitifs usuels
Syntaxe : <xsd:element name="elt_name" type="xsd:primitive_type" />
string <xsd:element name="nom" type="xsd:string" />
integer <xsd:element name="note" type="xsd:integer" />
float <xsd:element name="salaire" type="xsd:float" />
boolean <xsd:element name="adulte" type="xsd:boolean" />
date <xsd:element name="dateConf" type="xsd:date" />
gYear <xsd:element name="année" type="xsd:gYear" />
32/43
01 Syntaxe :
Les XSDs
Les éléments simples : les restrictions
<xsd:element name="element_name">
<xsd:simpleType>
<xsd:restriction base="xsd :Restriction_base">
Description de la Restriction
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
La section " Description Restriction " dépend du type de base soumis à la
restriction comme illustré à travers ces deux exemples :
Restriction_base Description de la Restriction
xsd :integer <xsd:minInclusive value="min_value"/>
<xsd:maxInclusive value="max_value"/>
xsd:string <xsd:length value="length_value"/>
L’énumèration est une forme de restriction spécifiée par autant de
<xsd:enumeration value="val1"/> qu’il y a de valeurs à énumèrer
33/43
01 Les XSDs
Les éléments simples : union, et liste
Les éléments simples de type union et liste doivent être conforme à la syntaxe
suivante :
<xsd:element name="element_name">
<xsd:simpleType>
Déclaration Union ou déclaration liste
</xsd:simpleType>
</xsd:element>
La section " Description Restriction " dépend du type de base soumis à la
restriction comme illustré à travers ces deux exemples :
Déclaration Syntaxe
xsd :union <xsd: union memberTypes="element_1 element_2,. ..."/>
xsd:liste <xsd: list itemType="xsd:type"/>
34/43
01 Les XSDs
Les éléments XSDs complexes
Par opposition à élément simple, un élément complexe est composé d’autres
éléments et/ou d’un attribut (élément empty)
Syntaxe : <xsd:element name="element_name">
<xsd:complexType>
sequence | choice | all | vide
</xsd:complexType>
</xsd:element>
Type Syntaxe
xsd :sequence <xsd:sequence>
Éléments de la séquence
</xsd:sequence>
xsd:choice <xsd:choice>
Éléments au choix
</xsd:choice>
xsd:all <xsd:all>
Éléments du "all" (l’ordre des éléments n’est pas important)
</xsd:all>
xsd:empty <xs:attribute name="att_name" type="xsd:type"/>
35/43
01 Les XSDs
Les éléments complexes : extension et restriction
Les restrictions/extensions des éléments complexes requièrent la déclaration de
types définie par l’utilisateur
<xsd:complexType name="infos">
<xsd:sequence>
<xsd:complexType name="type_de_base">
<xsd:element name="firstname" type="xs:string"/>
Déclaration de l’élément complexe <xsd:element name="lastname" type="xs:string"/>
</xsd:sequence>
</xsd:complexType> </xsd:complexType>
<xsd:complexType name="student_infos">
<xsd:complexContent>
<xsd:extension base="infos">
<xsd:sequence>
<xsd:element name="email" type="xsd:string"/>
</xsd:sequence>
</xsd:extension >
</xsd:complexContent>
</xsd:complexType name>
<xsd:element name= "USTO_student" type="student_info"/>
36/43
01 Les XSDs
Les éléments complexes : extension et restriction
<xsd:complexType name="univ">
<xsd:complexType name="type_de_base"> <xsd:sequence>
Déclaration de l’élément complexe <xsd:element name="acronyme" type="xsd:string"/>
</xsd:complexType> <xsd:element name="site_web" type="xsd:string"/>
<xsd:element name="domaine" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="web_infos">
<xsd:complexContent>
<xsd:restriction base="univ">
<xsd:sequence>
<xsd:element name="acronyme" type="xsd:string"/>
<xsd:element name="site_web" type="xsd:string"/>
<xsd:element name="domaine" type="xsd:string" fixed="dz"/>
</xsd:sequence>
</xsd:restriction >
</xsd:complexContent>
</xsd:complexType name>
<xsd:element name= "contact" type="web_infos"/>
37/43
01 Les XSDs
Les nombres d’occurrences
Les attributs minOccurs et maxOccurs permettent de préciser le nombre
minimal ou maximal d'occurrences d'un élément ou d'un groupe. Ils sont
l'équivalent des opérateurs ?, * et + des DTD. Ils peuvent apparaître comme
attribut des éléments xsd:element, xsd:sequence, xsd:choice et xsd:all.
Exemple :
<xsd:element name="section">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="group" type="xsd:string"/>
<xsd:element name="student_name" type="xsd:string" maxOccurs="20"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
38/43
01 Les XSDs
Les attributs dans les éléments XSDs complexes
<xsd: complexType>
Syntaxe :
<xsd:attribute name="att_name" type="att_type" use="att_use" default|fixed="val/>
</xsd:complexType>
att_type ::= string | decimal | integer | boolean | date| time|ID|user defined type |….
att_use : := required | optionnal
default := Default value
fixed := Fixed value
Exemple de déclaration d’un attribut optionnel langue ayant comme valeur
par défaut AR :
<xsd:complexType>
<xsd:attribute name="langue" type="xsd:string" use="optional" default="AR" />
</xsd:complexType>
39/43
01 Les XSDs
Les patterns dans les XSDs
Les patterns sont utilisés en XSD pour restreindre par des expressions
régulières les valeurs que prendre un élément ou un attribut.
<xsd:element name="element_name">
<xsd:simpleType>
Syntaxe : <xsd:restriction base="xsd:string">
<xsd:pattern value=regExpr"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
40/43
01 Les XSDs
La commande xmllint permet de vérifier si un document xml est
valide par rapport au scéma xsd correspondant :
xmllint --schema [Link] [Link]
41/43
01 Les XSDs
Webographie
1. [Link]
2. [Link]
42/43
43/43