SlideShare une entreprise Scribd logo
1  sur  13
Télécharger pour lire hors ligne
TP 1: Services Web JAX-WS
et JAX-RS avec IntelliJ-IDEA
Cours eServices - GL5
GL5 - 2015-2016


TP 1 ESERVICES MME. LILIA SFAXI 1
Objectifs du TP
Utiliser IntelliJ-IDEA pour la création de services web SOAP et REST, ainsi que leurs
clients.
I. Environnement de développement
IntelliJ-IDEA est un environnement de développement intégré (IDE) en Java. Il est1
développé par l’entreprise JetBrains, et disponible en édition communautaire avec une
licence Apache 2, ainsi qu’une édition commerciale propriétaire.
La version utilisée dans ce TP est la version "Ultimate Edition 14.1.*"
On aura également besoin du serveur d’application Tomcat (version 7 ou plus) pour le
déploiement des services web, et d’un client SOAP-UI pour les tests des services web.
II. Les Services Web avec JAX-WS
1. JAX-WS
JAX-WS (Java API for XML - Web Services) est une API permettant de développer des2
services web étendus en utilisant le protocole SOAP et le langage WSDL via la
plateforme de développement JAVA.
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 requièrent simplement l’utilisation d’annotations Java.
IntelliJ-IDEA: https://www.jetbrains.com/idea/1
JAX-WS: http://jax-ws.java.net/2
TP 1 ESERVICES MME. LILIA SFAXI 2
La figure suivante montre l’architecture d’un système utilisant JAX-WS.3
Il existe deux façons pour développer un service web avec JAX-WS :
1. Approche Top-Down (Contract First) : permet, à partir d’un document WSDL, de
générer les squelettes des différentes classes Java, de compléter leur
implémentation, puis de les compiler, déployer et tester.
2. Approche Bottom-Up (Code First) : permet de créer et d’annoter un POJO, de le
compiler, déployer et tester, puis de générer automatiquement le document WSDL.
2. Axis 2
Axis2 est un moteur de web services SOAP/WSDL, successeur de Apache Axis. Il4
existe deux implémentations de ce moteur: Apache Axis2/Java et Apache Axis2/C.
Figure extraite du cours Développer des Services Web Étendus avec Java : JAX-WS, par Mickaël3
BARON.
Axis2: http://axis.apache.org/axis2/java/core/4
TP 1 ESERVICES MME. LILIA SFAXI 3
3. Première Application JAX-WS: HelloWorld
1. Création du service web
Comme indiqué précédemment, deux approches sont possibles pour créer un service
web  : une approche Bottom-Up et une approche Top-Down. L’approche qui nous
intéresse pour ce TP (et celle le plus communément utilisée) est l’approche Bottom-Up
(Code first).
Pour créer un service web en utilisant l’approche Bottom-Up, nous allons suivre les
étapes suivantes :
• Créer un nouveau projet de type Web Services, en choisissant l’implémentation Axis2,
et l’appeler sampleServer.
• Le code généré aura l’allure suivante:
TP 1 ESERVICES MME. LILIA SFAXI 4
• Désigner la classe comme service web, et la méthode sayHelloWorldFrom comme
WebMethod. Pour cela, ajouter à la main, ou en utilisant le quick-fix (l’ampoule jaune
), les annotations nécessaires.
• Le code obtenu sera comme suit:
• Configurer ensuite le serveur Tomcat (que vous aurez préalablement installé dans
l’emplacement de votre choix). Pour cela, aller dans les préférences de l’IDE (File ->
Settings) puis naviguer vers Build, Execution, Deployment -> Application Servers.
Ajouter votre serveur Tomcat dans la liste des serveurs (si ce n’est déjà fait) en le
configurant correctement.
• Configurer ensuite votre environnement d’exécution de manière à ce que Tomcat soit
démarré et le service déployé. Pour cela, aller vers Run -> Edit Configurations… et:
- Sélectionner le serveur d’application Tomcat que vous venez de configurer, en
cliquant sur + (en haut de la fenêtre) et en sélectionnant dans la liste
Tomcat Server -> Local
- Appeler votre configuration Tomcat, par exemple. Décocher la case After launch
pour éviter qu’une nouvelle fenêtre de navigateur s’affiche à chaque exécution
- Sous l’onglet Deployment, ajouter un nouvel artifact à déployer (dans notre cas, un
fichier war). Pour cela, cliquer sur le + en bas de la fenêtre, et choisir Artifact… Un
nouvel artifact sampleServer:war exploded va s’ajouter à la liste de déploiement.
- Modifier les informations concernant cet artifact en cliquant sur le stylo
- La fenêtre suivante s’affiche:
TP 1 ESERVICES MME. LILIA SFAXI 5
- Un message d’erreur apparait en bas de la fenêtre, indiquant que la bibliothèque
AX-WS-Apache-Axis n’est pas installée. Cliquer sur Fix… puis Add JAX-WS-Apache-
Axis to the artifact. Cliquer ensuite sur OK.
- Revenir vers l’onglet Server. Modifier l’action on Update pour qu’elle re-déploie le
service à chaque lancement, au lieu de redémarrer le serveur.
• Cliquer ensuite sur Run (le bouton en haut à droite de votre fenêtre). Bien
vérifier, sur la console de votre IDE, que l’artifact est bien déployé, et que le serveur a
démarré. Ces messages doivent donc y figurer (entre autres):
• Vérifier que le service web est bien déployé en ouvrant dans votre navigateur préféré:
http://localhost:8080/services
• Générer le fichier WSDL à partir de ce service web. Pour cela, aller à Tools -> Web
Services -> Generate WSDL from Java Code.
2. Création du client Java
Nous allons maintenant créer un client Java qui va consommer le web service que nous
avons créé.
• Créer un nouveau projet de type Web Services Client en générant un code client
Axis2, et l’appeler sampleClient.
TP 1 ESERVICES MME. LILIA SFAXI 6
• Sous le répertoire src de votre projet, créer un package intitulé client.
• Faites un clic droit sur le répertoire client, et aller vers New -> Web Service Client.
• Appeler votre client HWClient. Vous devez également indiquer quel service vous
désirez consommer en donnant son WSDL. Là, vous avez le choix:
- Soit vous donnez l’URL du WSDL que vous venez de déployer, dans notre cas :
http://localhost:8080/services/HelloWorld?wsdl
- Soit vous naviguez vers le fichier WSDL que vous avez généré à partir du projet
précédent.
• Vous remarquerez que plusieurs classes ont été créées pour permettre l’utilisation de
votre service web. Corriger la classe WSClient en remplaçant:
- RemoteHost par HelloWorld_PortType
- get() par getHelloWorld()
- businessMethod() par sayHelloWorldFrom(“GL5")
• Afficher le résultat de la méthode sayHelloWorldFrom sur la sortie standard (console).
• Exécuter la classe. Le résultat obtenu sera comme suit:
3. Test du service web avec le client SoapUI
Le serveur d’application qui héberge le service peut parfois être inaccessible à
l’utilisateur. On dispose donc d’autres outils pour tester notre service web. On cite par
exemple l’outil soapUI qui est une solution de test open source et multi-plateforme,
permettant de créer rapidement et facilement des tests fonctionnels, grâce à une
interface graphique intuitive.
• Installer l’outil soapui (il est inutile d’installer Hermer JMS).
• Pour tester votre service, créer un nouveau projet intitulé HelloWorldTest et donner
l’URL du fichier WSDL du service HelloWorldService (ou bien le chemin du fichier
WSDL généré). Cliquer ensuite sur OK.
TP 1 ESERVICES MME. LILIA SFAXI 7
• Double-cliquer sur Request1. La fenêtre suivante va s’ouvrir.
• Le premier cadre représente la requête soap, et le second représente la réponse. Pour
tester le service, taper GL5 à la place du « ? » dans la balise <arg0> ?</arg0>
• Cliquer sur la flèche et observer le résultat.
IV. Les Services Restful avec JAX-RS
1. Présentation de REST
REST (Representational State Transfer) est un style d’architecture basé sur les
standards Web et le protocole http. Il a été présenté en premier lieu par Roy Fielding en
2000.
Dans une architecture basée sur REST :
• Tout est Ressource. Une ressource est accédée via une interface basée sur les
méthodes http standard.
• Il existe un serveur REST qui fournit l’accès aux ressources, et un client REST qui
accède et modifie les ressources REST.
• Chaque ressource doit supporter les opérations HTTP communes. Elle est identifiée
par un ID global (typiquement un URI)
• Les ressources peuvent avoir des représentations différentes (texte, xml, json…). Le
client REST peut exiger des représentations spécifiques via le protocole HTTP
(négociation de contenu).
Les Méthodes http
Les méthodes PUT, GET, POST et DELETE sont utilisées dans les architectures à base de
REST.
• GET définit un accès en lecture de la ressource. Il ne change jamais la ressource
• PUT crée une nouvelle ressource
• DELETE supprime une ressource
• POST met à jour une ressource existante et peut en créer des nouvelles
Les services web RESTful
Les services web RESTful sont basés sur les méthodes http et le concept de REST, Ils
définissent un URI de base pour les services, les types MIME (XML, Text, JSON, …) et
l’ensemble des opérations supportées (POST, GET, PUT et DELETE).
2. Présentation de JAX-RS
Java définit un support pour le standard REST via JAX-RS (Java API for RESTful Web
Services). Il utilise des annotations pour simplifier le développement de services web
REST. Ces annotations permettent de définir les ressources et les actions pouvant y être
appliquées. Ces annotations prennent effet à l’exécution, pour générer les classes et
artéfacts pour la ressource.
Le tableau ci-dessous représente les annotations les plus utilisées dans JAX-RS :

TP 1 ESERVICES MME. LILIA SFAXI 8
3. Première Application JAX-RS: HelloWorld
1. Création du service web
Pour créer un service web RESTful en utilisant l’IDE IntelliJ:
• Créer un nouveau projet de type RESTful Web Service, sans générer de code serveur
ni de code client. Indiquer que la bibliothèque utilisée sera installée plus tard.

Annotation Description
@PATH Chemin URI indiquant où une classe Java sera hébergée. Par
exemple /helloworld. Il est également possible d’insérer des
variables dans un URI, par exemple, il est possible de
demander le nom de l’utilisateur et le passer à l’application
dans le chemin : /helloworld/{username}
@GET Une méthode Java annotée avec @GET désigne une requête
de type HTTP GET. Le comportement de la ressource est
déterminé par la méthode HTTP à laquelle la ressource
répond.
@POST Désigne une méthode correspondant à la requête HTTP
POST.
@PUT Désigne une méthode correspondant à la requête HTTP PUT.
@DELETE Désigne une méthode correspondant à la requête HTTP
DELETE.
@HEAD Désigne une méthode correspondant à la requête HTTP
HEAD.
@PathParam Désigne un paramètre pouvant être extrait à partir de l’URI,
pour être utilisé par la ressource. Le nom du paramètre entré
correspond au nom de la variable définie dans l’annotation
@PATH
@Consumes Utilisée pour spécifier le type de représentation MIME qu’une
ressource peut consommer, et qui sont envoyées par le
client.
@Produces Utilisée pour spécifier le type de représentation MIME qu’une
ressource peut produire, et envoyer au client.
TP 1 ESERVICES MME. LILIA SFAXI 9
• Faire un clic droit sur le projet, et choisir Add Framework Support… Ajouter le
framework Maven, ainsi que le support Web (en cochant Web Application, et en
s’assurant que Create web.xml est bien coché)
• Dans le fichier pom.xml généré, définir le groupID de votre projet (com.example.jersey
par exemple) et ajouter la dépendance pour la bibliothèque jersey, version 1.18.3, une
API JAX-RS standard et portable, permettant de simplifier le développement de
services web RESTful:
TP 1 ESERVICES MME. LILIA SFAXI 10
• Cliquer sur Enable Auto-Import sur le popup qui s’affiche (figure ci-dessus).
• Dans le répertoire src/main/java, créer un nouveau package portant le nom de votre
groupID.
• Créer dans ce package une ressource HelloWorld.java, comme suit:
• Configurer le serveur Tomcat (si ce n’est déjà fait).
• Créer une nouvelle configuration pour l’exécution, de la même manière que pour JAX-
WS. Dans la fenêtre de configuration de l’artifact, double cliquer sur les deux
bibliothèques se trouvant dans la case Available Elements, pour les ajouter au fichier
war généré.
• Configurer votre fichier web.xml en ajoutant le code suivant: (Attention, la param-value
du paramètre com.sun.jersey.config.property.packages doit être votre nom de
package)
• Exécuter l’application. Une fois le serveur démarré et le service déployé, vous pourrez
voir le résultat en tapant sur votre navigateur:
http://localhost:8080/hello
2. Ajout de paramètres à la requête
Pour ajouter des paramètres à la requête, deux choix sont possibles:
• Utiliser l’annotation @PathParam(<param_name>), ce qui permettra d'ajouter le
paramètre comme élément de l’URL appelée. Le code aura alors l’allure suivante:
TP 1 ESERVICES MME. LILIA SFAXI 11
L’URI de la ressource sera alors de la forme suivante:
http://localhost:8080/hello/nom/GL5
• Utiliser l’annotation @QueryParam(<param_name>), ce qui permettra d’utiliser la
notation des paramètres. Le code aura alors l’allure suivante:
L’URI de la ressource sera alors de la forme suivante:
localhost:8080/hello?nom=GL5
3. Test du service RESTful avec IntelliJ
IntelliJ offre un mécanisme pour tester facilement les services web RESTful.
• Aller à Tools -> Test Restful Web Service
• Une vue REST Client s’affichera en bas de votre écran:
• Si c’est le PathParam qui est utilisé, alors il faut remplacer le contenu de Path par /
hello/nom/GL5, puis cliquer sur la flèche verte .
• Si on a utilisé le QueryParam, alors il faut ajouter un nouveau Request Parameter avec
nom comme nom, et GL5 comme valeur.
4. Création d’un client Java
Il est très facile de consommer un service RESTful en utilisant Java. Il suffit d’utiliser
Jersey.
• Créer un projet de type RESTful Web Service, et de laisser l’IDE télécharger les
bibliothèques nécessaires (notamment Jersey).
• Modifier la version de Jersey vers 1.12. Pour cela, aller vers File -> Project Structure ->
Libraries. Sélectionner la bibliothèque Jersey, puis cliquer sur Change Version.
• Écrire le code suivant dans la classe HelloWorldClient générée.
TP 1 ESERVICES MME. LILIA SFAXI 12
• Ne pas oublier de modifier le chemin utilisé dans la méthode resource selon la
méthode de paramètrage choisie.
• Lancer la classe normalement.
TP 1 ESERVICES MME. LILIA SFAXI 13

Contenu connexe

Tendances

Telecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQLTelecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQLwebreaker
 
Chp3 - Les Services Web
Chp3 - Les Services WebChp3 - Les Services Web
Chp3 - Les Services WebLilia Sfaxi
 
Architecture réparties et les services web
Architecture réparties et les services webArchitecture réparties et les services web
Architecture réparties et les services webCHOUAIB EL HACHIMI
 
Architectures orientées services
Architectures orientées servicesArchitectures orientées services
Architectures orientées servicesDonia Hammami
 
Introduction aux systèmes répartis
Introduction aux systèmes répartisIntroduction aux systèmes répartis
Introduction aux systèmes répartisHeithem Abbes
 
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...ENSET, Université Hassan II Casablanca
 
Chp4 - Diagramme de Séquence
Chp4 - Diagramme de SéquenceChp4 - Diagramme de Séquence
Chp4 - Diagramme de SéquenceLilia Sfaxi
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPYouness Boukouchi
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UMLAmir Souissi
 
eServices-Tp3: esb
eServices-Tp3: esbeServices-Tp3: esb
eServices-Tp3: esbLilia Sfaxi
 
BigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-ReduceBigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-ReduceLilia Sfaxi
 

Tendances (20)

Support JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.YoussfiSupport JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.Youssfi
 
Présentation SOA
Présentation SOAPrésentation SOA
Présentation SOA
 
Telecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQLTelecharger Exercices corrigés PL/SQL
Telecharger Exercices corrigés PL/SQL
 
Chp3 - Les Services Web
Chp3 - Les Services WebChp3 - Les Services Web
Chp3 - Les Services Web
 
Support de cours entrepise java beans ejb m.youssfi
Support de cours entrepise java beans ejb m.youssfiSupport de cours entrepise java beans ejb m.youssfi
Support de cours entrepise java beans ejb m.youssfi
 
Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)
 
Architecture réparties et les services web
Architecture réparties et les services webArchitecture réparties et les services web
Architecture réparties et les services web
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
 
Architectures orientées services
Architectures orientées servicesArchitectures orientées services
Architectures orientées services
 
Support de cours Spring M.youssfi
Support de cours Spring  M.youssfiSupport de cours Spring  M.youssfi
Support de cours Spring M.youssfi
 
Introduction aux systèmes répartis
Introduction aux systèmes répartisIntroduction aux systèmes répartis
Introduction aux systèmes répartis
 
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...Support de cours EJB 3 version complète Par Mr  Youssfi, ENSET, Université Ha...
Support de cours EJB 3 version complète Par Mr Youssfi, ENSET, Université Ha...
 
Chp2 - SOA
Chp2 - SOAChp2 - SOA
Chp2 - SOA
 
Chp4 - Diagramme de Séquence
Chp4 - Diagramme de SéquenceChp4 - Diagramme de Séquence
Chp4 - Diagramme de Séquence
 
Appalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSPAppalications JEE avec Servlet/JSP
Appalications JEE avec Servlet/JSP
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UML
 
Support JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVCSupport JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVC
 
eServices-Tp3: esb
eServices-Tp3: esbeServices-Tp3: esb
eServices-Tp3: esb
 
BigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-ReduceBigData_Chp2: Hadoop & Map-Reduce
BigData_Chp2: Hadoop & Map-Reduce
 
Support de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfiSupport de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfi
 

En vedette

eServices-Chp4: ESB
eServices-Chp4: ESBeServices-Chp4: ESB
eServices-Chp4: ESBLilia Sfaxi
 
eServices-Tp5: api management
eServices-Tp5: api managementeServices-Tp5: api management
eServices-Tp5: api managementLilia Sfaxi
 
eServices-Chp1: Introduction
eServices-Chp1: IntroductioneServices-Chp1: Introduction
eServices-Chp1: IntroductionLilia Sfaxi
 
eServices-Chp6: WOA
eServices-Chp6: WOAeServices-Chp6: WOA
eServices-Chp6: WOALilia Sfaxi
 
eServices-Chp3: Composition de Services
eServices-Chp3: Composition de ServiceseServices-Chp3: Composition de Services
eServices-Chp3: Composition de ServicesLilia Sfaxi
 
eServices-Tp4: esb++
eServices-Tp4: esb++eServices-Tp4: esb++
eServices-Tp4: esb++Lilia Sfaxi
 
eServices-Chp5: Microservices et API Management
eServices-Chp5: Microservices et API ManagementeServices-Chp5: Microservices et API Management
eServices-Chp5: Microservices et API ManagementLilia Sfaxi
 
eServices-Chp2: SOA
eServices-Chp2: SOAeServices-Chp2: SOA
eServices-Chp2: SOALilia Sfaxi
 
Getting Started with Real-time Analytics
Getting Started with Real-time AnalyticsGetting Started with Real-time Analytics
Getting Started with Real-time AnalyticsAmazon Web Services
 
Real Time Analytics: Algorithms and Systems
Real Time Analytics: Algorithms and SystemsReal Time Analytics: Algorithms and Systems
Real Time Analytics: Algorithms and SystemsArun Kejariwal
 
Big Data Real Time Applications
Big Data Real Time ApplicationsBig Data Real Time Applications
Big Data Real Time ApplicationsDataWorks Summit
 

En vedette (11)

eServices-Chp4: ESB
eServices-Chp4: ESBeServices-Chp4: ESB
eServices-Chp4: ESB
 
eServices-Tp5: api management
eServices-Tp5: api managementeServices-Tp5: api management
eServices-Tp5: api management
 
eServices-Chp1: Introduction
eServices-Chp1: IntroductioneServices-Chp1: Introduction
eServices-Chp1: Introduction
 
eServices-Chp6: WOA
eServices-Chp6: WOAeServices-Chp6: WOA
eServices-Chp6: WOA
 
eServices-Chp3: Composition de Services
eServices-Chp3: Composition de ServiceseServices-Chp3: Composition de Services
eServices-Chp3: Composition de Services
 
eServices-Tp4: esb++
eServices-Tp4: esb++eServices-Tp4: esb++
eServices-Tp4: esb++
 
eServices-Chp5: Microservices et API Management
eServices-Chp5: Microservices et API ManagementeServices-Chp5: Microservices et API Management
eServices-Chp5: Microservices et API Management
 
eServices-Chp2: SOA
eServices-Chp2: SOAeServices-Chp2: SOA
eServices-Chp2: SOA
 
Getting Started with Real-time Analytics
Getting Started with Real-time AnalyticsGetting Started with Real-time Analytics
Getting Started with Real-time Analytics
 
Real Time Analytics: Algorithms and Systems
Real Time Analytics: Algorithms and SystemsReal Time Analytics: Algorithms and Systems
Real Time Analytics: Algorithms and Systems
 
Big Data Real Time Applications
Big Data Real Time ApplicationsBig Data Real Time Applications
Big Data Real Time Applications
 

Similaire à eServices-Tp1: Web Services

WebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
WebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbWebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
WebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbHINDGUENDOUZ
 
Architecture java j2 ee a partager
Architecture java j2 ee a partagerArchitecture java j2 ee a partager
Architecture java j2 ee a partageraliagadir
 
2 20 presentations_generales_des_web_services
2 20 presentations_generales_des_web_services2 20 presentations_generales_des_web_services
2 20 presentations_generales_des_web_servicesCamus LANMADOUCELO
 
Tp soa avec talend esb
Tp soa avec talend esbTp soa avec talend esb
Tp soa avec talend esbAlahyane Ahmed
 
Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)Tugdual Grall
 
Création de Services et Configuration du ESB avec TalendESB
Création de Services et Configuration du ESB avec TalendESBCréation de Services et Configuration du ESB avec TalendESB
Création de Services et Configuration du ESB avec TalendESBLilia Sfaxi
 
Une visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs Web
Une visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs WebUne visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs Web
Une visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs WebFrédéric Harper
 
comment realiser un Service Web
comment realiser un Service Web comment realiser un Service Web
comment realiser un Service Web Nazih Heni
 
Introduction aux Technologies Web élaborée par Marouan OMEZZINE
Introduction aux Technologies Web élaborée par Marouan OMEZZINEIntroduction aux Technologies Web élaborée par Marouan OMEZZINE
Introduction aux Technologies Web élaborée par Marouan OMEZZINEMarouan OMEZZINE
 
cours-gratuit.com--id-1964.pdf
cours-gratuit.com--id-1964.pdfcours-gratuit.com--id-1964.pdf
cours-gratuit.com--id-1964.pdfRachida19
 
Webserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas docWebserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas docWinslo Nwan
 

Similaire à eServices-Tp1: Web Services (20)

Axis2 services fr
Axis2 services frAxis2 services fr
Axis2 services fr
 
WebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
WebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbWebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
WebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
 
Architecture java j2 ee a partager
Architecture java j2 ee a partagerArchitecture java j2 ee a partager
Architecture java j2 ee a partager
 
.NET DotNet CF - 3
.NET DotNet CF - 3.NET DotNet CF - 3
.NET DotNet CF - 3
 
Support Web Services SOAP et RESTful Mr YOUSSFI
Support Web Services SOAP et RESTful Mr YOUSSFISupport Web Services SOAP et RESTful Mr YOUSSFI
Support Web Services SOAP et RESTful Mr YOUSSFI
 
2 20 presentations_generales_des_web_services
2 20 presentations_generales_des_web_services2 20 presentations_generales_des_web_services
2 20 presentations_generales_des_web_services
 
Tp soa avec talend esb
Tp soa avec talend esbTp soa avec talend esb
Tp soa avec talend esb
 
Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)Introduction aux RIA (Rich Internet Applications)
Introduction aux RIA (Rich Internet Applications)
 
Création de Services et Configuration du ESB avec TalendESB
Création de Services et Configuration du ESB avec TalendESBCréation de Services et Configuration du ESB avec TalendESB
Création de Services et Configuration du ESB avec TalendESB
 
Une visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs Web
Une visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs WebUne visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs Web
Une visite guidée d’Internet Explorer 9 et HTML5 pour les développeurs Web
 
comment realiser un Service Web
comment realiser un Service Web comment realiser un Service Web
comment realiser un Service Web
 
Introduction aux Technologies Web élaborée par Marouan OMEZZINE
Introduction aux Technologies Web élaborée par Marouan OMEZZINEIntroduction aux Technologies Web élaborée par Marouan OMEZZINE
Introduction aux Technologies Web élaborée par Marouan OMEZZINE
 
Ter Web Service Intro
Ter Web Service IntroTer Web Service Intro
Ter Web Service Intro
 
cours-gratuit.com--id-1964.pdf
cours-gratuit.com--id-1964.pdfcours-gratuit.com--id-1964.pdf
cours-gratuit.com--id-1964.pdf
 
Webserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas docWebserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas doc
 
OpenESB et BPEL
OpenESB et BPELOpenESB et BPEL
OpenESB et BPEL
 
La plateforme JEE
La plateforme JEELa plateforme JEE
La plateforme JEE
 
Tutoriel web service
Tutoriel  web serviceTutoriel  web service
Tutoriel web service
 
Soap
SoapSoap
Soap
 
Java Entreprise Edition
Java Entreprise EditionJava Entreprise Edition
Java Entreprise Edition
 

Plus de Lilia Sfaxi

chp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdfchp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdfLilia Sfaxi
 
Plan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdfPlan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdfLilia Sfaxi
 
Lab1-DB-Cassandra
Lab1-DB-CassandraLab1-DB-Cassandra
Lab1-DB-CassandraLilia Sfaxi
 
TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-CorrectionLilia Sfaxi
 
TP1-UML-Correction
TP1-UML-CorrectionTP1-UML-Correction
TP1-UML-CorrectionLilia Sfaxi
 
TP0-UML-Correction
TP0-UML-CorrectionTP0-UML-Correction
TP0-UML-CorrectionLilia Sfaxi
 
TD4-UML-Correction
TD4-UML-CorrectionTD4-UML-Correction
TD4-UML-CorrectionLilia Sfaxi
 
TD3-UML-Séquences
TD3-UML-SéquencesTD3-UML-Séquences
TD3-UML-SéquencesLilia Sfaxi
 
TD3-UML-Correction
TD3-UML-CorrectionTD3-UML-Correction
TD3-UML-CorrectionLilia Sfaxi
 
TD2 - UML - Correction
TD2 - UML - CorrectionTD2 - UML - Correction
TD2 - UML - CorrectionLilia Sfaxi
 
TD1-UML-correction
TD1-UML-correctionTD1-UML-correction
TD1-UML-correctionLilia Sfaxi
 
Android - Tp1 - installation et démarrage
Android - Tp1 -   installation et démarrageAndroid - Tp1 -   installation et démarrage
Android - Tp1 - installation et démarrageLilia Sfaxi
 
Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques Lilia Sfaxi
 
Android - Tp3 - intents
Android - Tp3 -  intentsAndroid - Tp3 -  intents
Android - Tp3 - intentsLilia Sfaxi
 
Android - TPBonus - web services
Android - TPBonus - web servicesAndroid - TPBonus - web services
Android - TPBonus - web servicesLilia Sfaxi
 
Android - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancésAndroid - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancésLilia Sfaxi
 

Plus de Lilia Sfaxi (20)

chp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdfchp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdf
 
Plan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdfPlan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdf
 
Lab3-DB_Neo4j
Lab3-DB_Neo4jLab3-DB_Neo4j
Lab3-DB_Neo4j
 
Lab2-DB-Mongodb
Lab2-DB-MongodbLab2-DB-Mongodb
Lab2-DB-Mongodb
 
Lab1-DB-Cassandra
Lab1-DB-CassandraLab1-DB-Cassandra
Lab1-DB-Cassandra
 
TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-Correction
 
TP1-UML-Correction
TP1-UML-CorrectionTP1-UML-Correction
TP1-UML-Correction
 
TP0-UML-Correction
TP0-UML-CorrectionTP0-UML-Correction
TP0-UML-Correction
 
TD4-UML
TD4-UMLTD4-UML
TD4-UML
 
TD4-UML-Correction
TD4-UML-CorrectionTD4-UML-Correction
TD4-UML-Correction
 
TD3-UML-Séquences
TD3-UML-SéquencesTD3-UML-Séquences
TD3-UML-Séquences
 
TD3-UML-Correction
TD3-UML-CorrectionTD3-UML-Correction
TD3-UML-Correction
 
TD2 - UML - Correction
TD2 - UML - CorrectionTD2 - UML - Correction
TD2 - UML - Correction
 
TD1 - UML - DCU
TD1 - UML - DCUTD1 - UML - DCU
TD1 - UML - DCU
 
TD1-UML-correction
TD1-UML-correctionTD1-UML-correction
TD1-UML-correction
 
Android - Tp1 - installation et démarrage
Android - Tp1 -   installation et démarrageAndroid - Tp1 -   installation et démarrage
Android - Tp1 - installation et démarrage
 
Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques
 
Android - Tp3 - intents
Android - Tp3 -  intentsAndroid - Tp3 -  intents
Android - Tp3 - intents
 
Android - TPBonus - web services
Android - TPBonus - web servicesAndroid - TPBonus - web services
Android - TPBonus - web services
 
Android - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancésAndroid - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancés
 

eServices-Tp1: Web Services

  • 1. TP 1: Services Web JAX-WS et JAX-RS avec IntelliJ-IDEA Cours eServices - GL5 GL5 - 2015-2016 
 TP 1 ESERVICES MME. LILIA SFAXI 1 Objectifs du TP Utiliser IntelliJ-IDEA pour la création de services web SOAP et REST, ainsi que leurs clients.
  • 2. I. Environnement de développement IntelliJ-IDEA est un environnement de développement intégré (IDE) en Java. Il est1 développé par l’entreprise JetBrains, et disponible en édition communautaire avec une licence Apache 2, ainsi qu’une édition commerciale propriétaire. La version utilisée dans ce TP est la version "Ultimate Edition 14.1.*" On aura également besoin du serveur d’application Tomcat (version 7 ou plus) pour le déploiement des services web, et d’un client SOAP-UI pour les tests des services web. II. Les Services Web avec JAX-WS 1. JAX-WS JAX-WS (Java API for XML - Web Services) est une API permettant de développer des2 services web étendus en utilisant le protocole SOAP et le langage WSDL via la plateforme de développement JAVA. 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 requièrent simplement l’utilisation d’annotations Java. IntelliJ-IDEA: https://www.jetbrains.com/idea/1 JAX-WS: http://jax-ws.java.net/2 TP 1 ESERVICES MME. LILIA SFAXI 2
  • 3. La figure suivante montre l’architecture d’un système utilisant JAX-WS.3 Il existe deux façons pour développer un service web avec JAX-WS : 1. Approche Top-Down (Contract First) : permet, à partir d’un document WSDL, de générer les squelettes des différentes classes Java, de compléter leur implémentation, puis de les compiler, déployer et tester. 2. Approche Bottom-Up (Code First) : permet de créer et d’annoter un POJO, de le compiler, déployer et tester, puis de générer automatiquement le document WSDL. 2. Axis 2 Axis2 est un moteur de web services SOAP/WSDL, successeur de Apache Axis. Il4 existe deux implémentations de ce moteur: Apache Axis2/Java et Apache Axis2/C. Figure extraite du cours Développer des Services Web Étendus avec Java : JAX-WS, par Mickaël3 BARON. Axis2: http://axis.apache.org/axis2/java/core/4 TP 1 ESERVICES MME. LILIA SFAXI 3
  • 4. 3. Première Application JAX-WS: HelloWorld 1. Création du service web Comme indiqué précédemment, deux approches sont possibles pour créer un service web  : une approche Bottom-Up et une approche Top-Down. L’approche qui nous intéresse pour ce TP (et celle le plus communément utilisée) est l’approche Bottom-Up (Code first). Pour créer un service web en utilisant l’approche Bottom-Up, nous allons suivre les étapes suivantes : • Créer un nouveau projet de type Web Services, en choisissant l’implémentation Axis2, et l’appeler sampleServer. • Le code généré aura l’allure suivante: TP 1 ESERVICES MME. LILIA SFAXI 4
  • 5. • Désigner la classe comme service web, et la méthode sayHelloWorldFrom comme WebMethod. Pour cela, ajouter à la main, ou en utilisant le quick-fix (l’ampoule jaune ), les annotations nécessaires. • Le code obtenu sera comme suit: • Configurer ensuite le serveur Tomcat (que vous aurez préalablement installé dans l’emplacement de votre choix). Pour cela, aller dans les préférences de l’IDE (File -> Settings) puis naviguer vers Build, Execution, Deployment -> Application Servers. Ajouter votre serveur Tomcat dans la liste des serveurs (si ce n’est déjà fait) en le configurant correctement. • Configurer ensuite votre environnement d’exécution de manière à ce que Tomcat soit démarré et le service déployé. Pour cela, aller vers Run -> Edit Configurations… et: - Sélectionner le serveur d’application Tomcat que vous venez de configurer, en cliquant sur + (en haut de la fenêtre) et en sélectionnant dans la liste Tomcat Server -> Local - Appeler votre configuration Tomcat, par exemple. Décocher la case After launch pour éviter qu’une nouvelle fenêtre de navigateur s’affiche à chaque exécution - Sous l’onglet Deployment, ajouter un nouvel artifact à déployer (dans notre cas, un fichier war). Pour cela, cliquer sur le + en bas de la fenêtre, et choisir Artifact… Un nouvel artifact sampleServer:war exploded va s’ajouter à la liste de déploiement. - Modifier les informations concernant cet artifact en cliquant sur le stylo - La fenêtre suivante s’affiche: TP 1 ESERVICES MME. LILIA SFAXI 5
  • 6. - Un message d’erreur apparait en bas de la fenêtre, indiquant que la bibliothèque AX-WS-Apache-Axis n’est pas installée. Cliquer sur Fix… puis Add JAX-WS-Apache- Axis to the artifact. Cliquer ensuite sur OK. - Revenir vers l’onglet Server. Modifier l’action on Update pour qu’elle re-déploie le service à chaque lancement, au lieu de redémarrer le serveur. • Cliquer ensuite sur Run (le bouton en haut à droite de votre fenêtre). Bien vérifier, sur la console de votre IDE, que l’artifact est bien déployé, et que le serveur a démarré. Ces messages doivent donc y figurer (entre autres): • Vérifier que le service web est bien déployé en ouvrant dans votre navigateur préféré: http://localhost:8080/services • Générer le fichier WSDL à partir de ce service web. Pour cela, aller à Tools -> Web Services -> Generate WSDL from Java Code. 2. Création du client Java Nous allons maintenant créer un client Java qui va consommer le web service que nous avons créé. • Créer un nouveau projet de type Web Services Client en générant un code client Axis2, et l’appeler sampleClient. TP 1 ESERVICES MME. LILIA SFAXI 6
  • 7. • Sous le répertoire src de votre projet, créer un package intitulé client. • Faites un clic droit sur le répertoire client, et aller vers New -> Web Service Client. • Appeler votre client HWClient. Vous devez également indiquer quel service vous désirez consommer en donnant son WSDL. Là, vous avez le choix: - Soit vous donnez l’URL du WSDL que vous venez de déployer, dans notre cas : http://localhost:8080/services/HelloWorld?wsdl - Soit vous naviguez vers le fichier WSDL que vous avez généré à partir du projet précédent. • Vous remarquerez que plusieurs classes ont été créées pour permettre l’utilisation de votre service web. Corriger la classe WSClient en remplaçant: - RemoteHost par HelloWorld_PortType - get() par getHelloWorld() - businessMethod() par sayHelloWorldFrom(“GL5") • Afficher le résultat de la méthode sayHelloWorldFrom sur la sortie standard (console). • Exécuter la classe. Le résultat obtenu sera comme suit: 3. Test du service web avec le client SoapUI Le serveur d’application qui héberge le service peut parfois être inaccessible à l’utilisateur. On dispose donc d’autres outils pour tester notre service web. On cite par exemple l’outil soapUI qui est une solution de test open source et multi-plateforme, permettant de créer rapidement et facilement des tests fonctionnels, grâce à une interface graphique intuitive. • Installer l’outil soapui (il est inutile d’installer Hermer JMS). • Pour tester votre service, créer un nouveau projet intitulé HelloWorldTest et donner l’URL du fichier WSDL du service HelloWorldService (ou bien le chemin du fichier WSDL généré). Cliquer ensuite sur OK. TP 1 ESERVICES MME. LILIA SFAXI 7
  • 8. • Double-cliquer sur Request1. La fenêtre suivante va s’ouvrir. • Le premier cadre représente la requête soap, et le second représente la réponse. Pour tester le service, taper GL5 à la place du « ? » dans la balise <arg0> ?</arg0> • Cliquer sur la flèche et observer le résultat. IV. Les Services Restful avec JAX-RS 1. Présentation de REST REST (Representational State Transfer) est un style d’architecture basé sur les standards Web et le protocole http. Il a été présenté en premier lieu par Roy Fielding en 2000. Dans une architecture basée sur REST : • Tout est Ressource. Une ressource est accédée via une interface basée sur les méthodes http standard. • Il existe un serveur REST qui fournit l’accès aux ressources, et un client REST qui accède et modifie les ressources REST. • Chaque ressource doit supporter les opérations HTTP communes. Elle est identifiée par un ID global (typiquement un URI) • Les ressources peuvent avoir des représentations différentes (texte, xml, json…). Le client REST peut exiger des représentations spécifiques via le protocole HTTP (négociation de contenu). Les Méthodes http Les méthodes PUT, GET, POST et DELETE sont utilisées dans les architectures à base de REST. • GET définit un accès en lecture de la ressource. Il ne change jamais la ressource • PUT crée une nouvelle ressource • DELETE supprime une ressource • POST met à jour une ressource existante et peut en créer des nouvelles Les services web RESTful Les services web RESTful sont basés sur les méthodes http et le concept de REST, Ils définissent un URI de base pour les services, les types MIME (XML, Text, JSON, …) et l’ensemble des opérations supportées (POST, GET, PUT et DELETE). 2. Présentation de JAX-RS Java définit un support pour le standard REST via JAX-RS (Java API for RESTful Web Services). Il utilise des annotations pour simplifier le développement de services web REST. Ces annotations permettent de définir les ressources et les actions pouvant y être appliquées. Ces annotations prennent effet à l’exécution, pour générer les classes et artéfacts pour la ressource. Le tableau ci-dessous représente les annotations les plus utilisées dans JAX-RS :
 TP 1 ESERVICES MME. LILIA SFAXI 8
  • 9. 3. Première Application JAX-RS: HelloWorld 1. Création du service web Pour créer un service web RESTful en utilisant l’IDE IntelliJ: • Créer un nouveau projet de type RESTful Web Service, sans générer de code serveur ni de code client. Indiquer que la bibliothèque utilisée sera installée plus tard.
 Annotation Description @PATH Chemin URI indiquant où une classe Java sera hébergée. Par exemple /helloworld. Il est également possible d’insérer des variables dans un URI, par exemple, il est possible de demander le nom de l’utilisateur et le passer à l’application dans le chemin : /helloworld/{username} @GET Une méthode Java annotée avec @GET désigne une requête de type HTTP GET. Le comportement de la ressource est déterminé par la méthode HTTP à laquelle la ressource répond. @POST Désigne une méthode correspondant à la requête HTTP POST. @PUT Désigne une méthode correspondant à la requête HTTP PUT. @DELETE Désigne une méthode correspondant à la requête HTTP DELETE. @HEAD Désigne une méthode correspondant à la requête HTTP HEAD. @PathParam Désigne un paramètre pouvant être extrait à partir de l’URI, pour être utilisé par la ressource. Le nom du paramètre entré correspond au nom de la variable définie dans l’annotation @PATH @Consumes Utilisée pour spécifier le type de représentation MIME qu’une ressource peut consommer, et qui sont envoyées par le client. @Produces Utilisée pour spécifier le type de représentation MIME qu’une ressource peut produire, et envoyer au client. TP 1 ESERVICES MME. LILIA SFAXI 9
  • 10. • Faire un clic droit sur le projet, et choisir Add Framework Support… Ajouter le framework Maven, ainsi que le support Web (en cochant Web Application, et en s’assurant que Create web.xml est bien coché) • Dans le fichier pom.xml généré, définir le groupID de votre projet (com.example.jersey par exemple) et ajouter la dépendance pour la bibliothèque jersey, version 1.18.3, une API JAX-RS standard et portable, permettant de simplifier le développement de services web RESTful: TP 1 ESERVICES MME. LILIA SFAXI 10
  • 11. • Cliquer sur Enable Auto-Import sur le popup qui s’affiche (figure ci-dessus). • Dans le répertoire src/main/java, créer un nouveau package portant le nom de votre groupID. • Créer dans ce package une ressource HelloWorld.java, comme suit: • Configurer le serveur Tomcat (si ce n’est déjà fait). • Créer une nouvelle configuration pour l’exécution, de la même manière que pour JAX- WS. Dans la fenêtre de configuration de l’artifact, double cliquer sur les deux bibliothèques se trouvant dans la case Available Elements, pour les ajouter au fichier war généré. • Configurer votre fichier web.xml en ajoutant le code suivant: (Attention, la param-value du paramètre com.sun.jersey.config.property.packages doit être votre nom de package) • Exécuter l’application. Une fois le serveur démarré et le service déployé, vous pourrez voir le résultat en tapant sur votre navigateur: http://localhost:8080/hello 2. Ajout de paramètres à la requête Pour ajouter des paramètres à la requête, deux choix sont possibles: • Utiliser l’annotation @PathParam(<param_name>), ce qui permettra d'ajouter le paramètre comme élément de l’URL appelée. Le code aura alors l’allure suivante: TP 1 ESERVICES MME. LILIA SFAXI 11
  • 12. L’URI de la ressource sera alors de la forme suivante: http://localhost:8080/hello/nom/GL5 • Utiliser l’annotation @QueryParam(<param_name>), ce qui permettra d’utiliser la notation des paramètres. Le code aura alors l’allure suivante: L’URI de la ressource sera alors de la forme suivante: localhost:8080/hello?nom=GL5 3. Test du service RESTful avec IntelliJ IntelliJ offre un mécanisme pour tester facilement les services web RESTful. • Aller à Tools -> Test Restful Web Service • Une vue REST Client s’affichera en bas de votre écran: • Si c’est le PathParam qui est utilisé, alors il faut remplacer le contenu de Path par / hello/nom/GL5, puis cliquer sur la flèche verte . • Si on a utilisé le QueryParam, alors il faut ajouter un nouveau Request Parameter avec nom comme nom, et GL5 comme valeur. 4. Création d’un client Java Il est très facile de consommer un service RESTful en utilisant Java. Il suffit d’utiliser Jersey. • Créer un projet de type RESTful Web Service, et de laisser l’IDE télécharger les bibliothèques nécessaires (notamment Jersey). • Modifier la version de Jersey vers 1.12. Pour cela, aller vers File -> Project Structure -> Libraries. Sélectionner la bibliothèque Jersey, puis cliquer sur Change Version. • Écrire le code suivant dans la classe HelloWorldClient générée. TP 1 ESERVICES MME. LILIA SFAXI 12
  • 13. • Ne pas oublier de modifier le chemin utilisé dans la méthode resource selon la méthode de paramètrage choisie. • Lancer la classe normalement. TP 1 ESERVICES MME. LILIA SFAXI 13