Mohamed Kawtharany
Installation et invocation des Services Web sous Tomcat / AXIS
Déroulement du TP
1. Installation et test des Tomcat / Axis
2. déployer des services avec JWS
3. déployer des services basiques avec WSDD
4. invocation dynamique et statique depuis un client sous java
Besoins du TP des logiciels et des fichier qui sont trouvés sur le site Yvon ([Link]
[Link]/~kermarre/TPDIST/). Créez vous une répertoire Axis, téléchargez les répertoires
apache, Axis JAR et le fichier Init et mettez les dans le répertoire Axis
Axis
[Link] axis-bin-1_4.[Link] JAR Init
1. Télécharger, Installer et tester Tomcat
Télécharger la version de Tomcat 5.5.27 Apache de site: ([Link]
[Link]/~kermarre/TPDIST/). Enregistrez-le dans un répertoire s’appelle Axis.
Taper les commandes suivantes pour le décompresser le fichier télécharger.
gzip -d [Link]
tar -xf [Link]
Normalement, avant d'exécuter Tomcat vous devez définir la variable d'environnement
JAVA_HOME à point à l'emplacement de l'installation de Java.
SETUP JAVA15
En ce moment vous vous pouvez lancer Tomcat par la commande.
apache-tomcat-5.5.27/bin/[Link]
Cela va démarrer Tomcat sur le port 8080 sur votre machine locale. Vous devriez voir
quelque chose comme ceci dans le terminal:
Using CATALINA_BASE: /homes/mkawthar/apache-tomcat-5.5.27
Using CATALINA_HOME: /homes/mkawthar/apache-tomcat-5.5.27
Using CATALINA_TMPDIR: /homes/mkawthar/apache-tomcat-5.5.27/temp
Using JRE_HOME: /usr/local/jdk1.5
Vous pouvez maintenant voir si Tomcat est bien démarré à l'aide d'un navigateur Web pour
cela connectez vous à l’adresse [Link] vérifiez que la page présentée indique
le serveur local (Tomcat).
Pour arrêter le serveur Tomcat tapez la commande: :
apache-tomcat-5.5.27/bin/[Link]
Using CATALINA_BASE: /homes/mkawthar/apache-tomcat-5.5.27
Using CATALINA_HOME: /homes/mkawthar/apache-tomcat-5.5.27
Using CATALINA_TMPDIR: /homes/mkawthar/apache-tomcat-5.5.27/temp
Using JRE_HOME: /usr/local/jdk1.5
2. Installation d’ Apache Axis
Axis est une servlet qui vous installer dans Tomcat. Dans cette section, vous allez
télécharger, installer et configurer Axis dans Tomcat installer vous vient de le faire.
Il existe de nombreuses versions de Axis, nous allons utiliser 1.4. télécharger le paquet binaire
de l'Axis depuis le site ([Link] et stocker dans le
répertoire Axis (le meme répertoire ou vous stockez le serveur Tomcat).
Décompresser Axis de la même manière que vous l'avez fait Tomcat.
gzip-d ax-bin-1_4.[Link]
tar-xf ax-bin-1_4.tar
Axis exige une copie de la JavaBeans Activation Framework pour fonctionner. Ce fichier ne
vient pas avec Axis (pour des raisons de license), donc vous devez le télécharger séparément
depuis le site web de Sun. Visite [Link] et
utilisez le lien de téléchargement pour obtenir le fichier, une fois de plus les mettre dans votre
répertoire home.
Ensuite, copiez Axis servlet dans Tomcat,
cp -r ~/Axis/axis-1_4/webapps/axis/ ~/Axis/apache-tomcat-5.5.27/webapps/
télécharger le répertoire « JAR » depuis le site ([Link]
[Link]/~kermarre/TPDIST/) et stocker dans le répertoire Axis tapez la command:
cp -r ~/Axis/JAR/[Link] ~/Axis/apache-tomcat-5.5.27/webapps/axis/WEB-INF/lib
cp -r ~/Axis/JAR/[Link] ~/Axis/apache-tomcat-5.5.27/webapps/axis/WEB-INF/lib
cp -r ~/Axis/JAR/[Link] ~/Axis/apache-tomcat-5.5.27/webapps/axis/WEB-INF/lib
Relancez le Tomcat qui va prendre en compte Axis et ses nouvelles configuration
apache-tomcat-5.5.27/bin/[Link]
Using CATALINA_BASE: /homes/mkawthar/apache-tomcat-5.5.27
Using CATALINA_HOME: /homes/mkawthar/apache-tomcat-5.5.27
Using CATALINA_TMPDIR: /homes/mkawthar/apache-tomcat-5.5.27/temp
Using JRE_HOME: /usr/local/jdk1.5
Dès que la copie du répertoire axis et les fichiers jar et après avoir relancé Tomcat, il est
possible d'invoquer le serveur (en local avec les installations par défaut:
[Link]
NB: Cette page publie deux services Web dont on peut demander l'affichage de l’interface
WSDL. La page la plus importante est cependant [Link] (URL
[Link] En effet, cette page fait le point des bibliothèques
(.jar) présentes et manquantes. Vous ne pouvez pas utiliser AXIS tant que des bibliothèques
"obligatoires" (core) manquent. Certaines bibliothèques sont optionnelles (messagerie,
sécurité, etc.). Tant que ces bibliothèques sont absentes, vous ne disposez pas de toutes les
fonctionnalités d'AXIS mais le moteur assure les fonctions de base.
3. Mise en place les variables d’environnement pour compiler
et déployer des programmes java (service)
téléchargez le fichier « Init » depuis le site : (blablabla) et le mettez dans le répertoire
« Axis »
pour le shell csh tapez la commande suivantes :
source ~Axis/Init
Remarque l'option à utiliser pour imposer le CLASSPATH à la JVM est -cp.
java -cp $AXISCLASSPATH ....
4. Web services
Le Framework Axis permet deux façons de procéder pour implémenter des web services
1. En mode source (JWS - Java Web Services)
2. En mode compilé (via WSDL – WSDD (Web Service Deployment Descriptions))
4.1 Déploiement web services en mode "source"
Dans ce type de déploiement, vous n'avez pas besoin de compiler ni de concevoir de
descripteur WSDD.
La première étape consiste à définir la classe du service web qui retournera au client un
message texte.
La définition de cette classe est la suivante :
public class HelloWorld {
public String Affiche_message (String msg) {
return msg;
}
}
Attention, vous devez sauvegardez votre classe sous le fichier portant le même nom de la
classe et suffixé par " jws " ! Ici, le fichier de sauvegarde sera donc : " [Link]".
Pour déployer le service « HelloWorld »
Il faut déplacer le fichier « [Link] » dans la racine du contexte d'AXIS
(~/Axis/apache-tomcat-5.5.27/webapps/axis) en changeant l'extension (.java) par l'extension
(.jws).
Vérifiez que le déploiement est bon, ouvrir le lien suivant :
[Link]
Pour invoquer le service « HelloWorld »
Il suffit alors d'invoquer directement cette "page" (.jws) pour invoquer le service Web. Quand
un client appelle ce fichier (.jws) via url, ce dernier est compilé et exécuté.
La structure de lien pour invoquer une opération d’un service avec le passage des paramètres est le
suivant :
[Link]
method=NOM_methode_a_invoquer&Nom_Parametres1=Valeur&
pour le service HelloWorld il faut lancer le url suivant depuis un navigateur web :
[Link]
NB : En fin, pour retrait d’un web Service utilisant JWS est très simple, il suffit pour cela de
supprimer le fichier ayant l’extension .jws.
Exercice :
- Créer un service Calculator admet deux opérations add et substract qui font le
l’addition et la différence de deux entiers.
- Deployer le service en mode source
- Invoquer les operations du service a l’aide du navigateur web
- Est-ce que Ca marche ☺!??
4.2 Déploiement mode "compilé"
Dans ce mode, on a besoins de deux étapes importants.
• Compiler le service.
• Définir un descripteur WSDD de ce service.
• Déploiement du service a l’aide du descripteur WSDD.
• Invocation du service.
Compilation du service
La première étape consiste à compiler la classe que vous avez définie, compilez le par
commande "javac [Link]", après vous devez copier la classe résultante dans le
dossier "Classes" (~/Axis/apache-tomcat-5.5.27/webapps/axis/WEB-INF/Classes)
ça dépends ou vous avez stocker le serveur Tomcat.
Définir le descripteur WSDD (Web Service Deployment Descriptions)
Afin d’utiliser des fonctionnalités avancées en terme de déploiement, vous pouvez utiliser les
descripteurs de déploiement. Ce principe implémenté par Axis permet de définir les méthodes
que vous souhaitez publier dans votre Web Service (c'est-à-dire que le moteur puisse
comprendre ce qui est publié et comment est faite cette publication, il faut adjoindre un
descripteur de déploiement spécifique à AXIS). Ces éléments ne sont pas paramétrables
lorsque vous déployez un Web Service en utilisant le principe de JWS évoqué précédemment.
Créez deux fichiers spécifiques à chacun de vos Web services, un pour le déployer et l’autre
pour le retirer (le rendre inaccessible). Par convention, ces fichiers sont souvent appelés
[Link] et [Link].
Le descripteur de déploiement est en réalité un fichier XML utilisé pour déployer votre Web
Service.
Ensuite vous devez définir la balise « service » en spécifiant en attribut :
· Le nom Web Service afin que celui-ci soit identifié par votre serveur d’application
· Le mode : RPC (Remote Procedure Call)
Vous devez au minimum définir deux balises « parameter ».
· Une de ces balises doit définir le nom de la classe associée au Web Service que vous
souhaitez déployer. En effet, la particularité du descripteur de déploiement est de
pouvoir spécifier un nom de service différent du nom de la classe décrivant son
comportement.
· La deuxième balise « parameter » permet de définir les méthodes accessibles à partir
du Web Service.
Voici un exemple du fichier [Link] à créer pour le Web Service d’exemple (ServiceHelloworld)
<deployment xmlns="[Link]
xmlns:java="[Link]
<service name="ServiceHelloWorld" style="RPC">
<parameter name="className" value="HelloWorld"/>
<parameter name="allowedMethods" value="*"/>
</service>
</deployment>
Et voici un exemple du fichier [Link] à créer pour désinstaller le Web Service d’exemple
(ServiceHelloworld)
<undeployment xmlns="[Link]
<service name="ServiceHelloWorld">
</undeployment>
Déploiement du service
L’étape suivante, après la compilation et la définition du WSDD, est de déployer le service à
l’aide du descripteur WSDD. Pour réaliser le déploiement du service. Il convient d'utiliser
l'utilitaire " AdminClient " du serveur " Axis ".
La commande de déploiement est :
java -cp $AXISCLASSPATH [Link] [Link]
Remarque : Pour vérifier que tout s'est bien passé, allez à l'adresse :
[Link]
et demandez à lister les services enregistrés. Vous y trouverez le service.
La dernière étapes est l’invocation du service :
Vous pouvez invoquer le service par la même méthode que l’exercice précédent depuis un
navigateur web.
NB: pour désactiver le web service ou le retirer, vous utiliserez le descripteur le fichier
[Link] la commande de désactivation est la suivante :
java -cp $AXISCLASSPATH [Link] [Link]
Exercice :
• Compilez le service de l’exemple précédent.
• Définissez un descripteur wsdd qui permet de décrire le service que vous avez créé.
• Déployez le service a l’ide du descripteur du service WSDD.
• invoquez les opérations add et substract du service.
• Essayez de désactiver le service et vérifiez s’il est désactivé ou no.
6. Développement du Client sous Java
Jusqu'à ce stade, nous avons toujours utilisé le navigateur Web pour invoquer les services et
visualiser (sous le format SOAP) les résultats retournés. Nous allons étudier maintenant, un
autre mode de communication avec les services plus adapté à leur mise en oeuvre, et surtout à
l'intégration avec d'autres applications. Ce deuxième modèle consiste à invoquer des Services
Web depuis le langage Java en générant automatiquement la définition du Proxy côté client.
Cela sous-entend la création de toutes les interfaces et classes nécessaires à la mise en oeuvre
du service depuis Java. Ce modèle est caractérisé par:
• Utilisation du stub côté client et du skeleton côté serveur
• Utilisation des interfaces représentant les types des objets Java à manipuler
Etape 1 : Création du fichier de description du web service "wsdl"
Pour ce faire, nous utiliserons le même service précédent, ouvrir depuis le navigateur web le
fichier WSDL qui rassemble le service puis enregistrer le fichier sous le nom
"[Link]" dans le dossier (~/Axis/apache-tomcat-5.5.27/webapps/axis /WEB-INF).
Etape 2 : Utilisation du générateur " WSDL2Java "
L'outil " Axis " qui permet la génération des définitions Java côté client et côté serveur,
s'appelle " [Link].WSDL2Java " par la commande :
java -cp $AXISCLASSPATH [Link].WSDL2Java [Link]
WSDL2Java générer un ensemble de classes facilitant l’envoi de message SOAP entre client
et serveur. Les classes générées sont pour les Type, les PortType, Binding, Port, et pour le
Service. Ces classes à partir de l’exemple sont :
-[Link]
-[Link]
-[Link]
-[Link]
Etape 3 : Construction du client java
Avant de définir le client Java, nous allons commence par clarifier quelques ambiguïtés
A quoi sert le Stub généré?
Ce fichier est le seul point d'entrée pour le web service, il contient toute l'information dont on
a besoin pour invoquer le web service :
- noms des méthodes,
- types des paramètres et
- les types de retour,
- et c'est ce qui permet à l'auteur du web service de protéger son code
Aurais-je besoin des librairies d'Axis pour appeler le web service?
NON, c'est seulement le serveur déployant le web service qui doit contenir les librairies Axis
Quels sont les fichiers dont j'ai besoin pour appeler le web service?
Nous aurons seulement besoin des fichiers générés (Stub) à l’aide du WSDL2JAVA, il faut
juste importer ces fichiers dans l'application et utiliser les interfaces présentes dans ce Stub.
On définit maintenant le client Java qui met en œuvre les classes générées lors de l'étape
précédente. Pour cela, votre client ressemblera à ceci : les étapes suivies pour construction du
client : Instanciez un Service, obtenez un Port à partir du Service, utiliser les méthodes du
Port et construisez les paramètres en fonction des Types.
Exercices :
Stockez le fichier WSDL du service « Calculator ».
- Stockez le fichier WSDL du service « Calculator »
- Utilisez WSDL2Java pour générer les Stubs.
- Ecrire code java qui permet d’invoquer les opérations de service Calculator en
utilisant les stubs génère.
7. invocation dynamique d’un client java
Cette méthode d’invocation est dynamique car on n’a pas besoin de générer stubs la
communication se fait par l’endpoint (c'est-à-dire par le lien du fichier wsdl l’interface du
service décrit des opérations de services qu’on peut invoquer). L’invocation dynamique décrit
pas les étapes suivantes :
La structure consiste en :
1. création d’un accès au service
2. création d’un appel vers le service
3. récupération de l’url du service accédé
4. récupération de la méthode à appliquer
5. mise en place des éventuelles valeurs des paramètres de la méthode
6. invocation du service
7. et récupération du résultat
- Etape 1 : création d'accès au service
Service service = new Service();
- Etape 2 : création un appel vers le service "CALL".
Call call = (Call)[Link]();
- Etape 3 : récupération de l'adresse URL du service accédée
String endpoint = "[Link]
[Link](new URL(endpoint));
- Etape 4–5-6-7: récupération et invocation de la méthode à appliquer (par exemple invoque
une méthode retourne un message « Hello » tel que cet opération est sans paramètres)
String message = (String)[Link]("Affichemessage", new Object[] {new
String(“HELLO”)});
Utilise les packages suivants, [Link], [Link],
[Link], [Link], [Link] pour
écrire un client java pour l’invocation dynamique.
Exercices :
Ecrire le code Client sous java sans générer des stubs pour invoquer les opérations du
service que vous avez déjà déployées.
8 Compléter le descripteur WSDD
A chaque fois qu’une méthode de service est invoquée (en fait, à chaque utilisation du
service), le serveur Axis, avant d’invoquer le méthode demandée créé une nouvelle instance
de classe. De ce fait, à chaque invocation de méthode, nous aurons toujours une nouvelle
instance qui sera obtenue avec le constructeur par défaut (correspond à la ligne de
déploiement <parameter name="scope" value="request"/>) !
Pour éviter ce problème, nous devons préciser que l’accès au service doit être associé soit à la
session utilisateur (utilisation du même navigateur par exemple) ou pour toutes requêtes
provenant de n’importe quel client. Pour ce faire, vous devez inclure dans le descripteur de
déploiement du service la ligne suivante :
<parameter name="scope" value="session"/> ou respectivement <parameter
name="scope" value="application"/>
Exercices
1. Créez un service web de gestion de compte ServiceCompte. Pour cela, on définit la classe
java
Compte dont voici le squelette :
public class Compte {
float Solde;
// Constructeur
public Compte() {
Solde = 0.0;
}
public void deposer (float montant) {
…
}
public boolean retirer (float montant) {
// retourne true si le solde reste positif, false sinon
…
}
public float solde() {
…
}
}
Testez ensuite le service au travers d’une interface web.
[Link]
[Link]
[Link]
[Link]
[Link]
2. Créez un client java qui utilise le service ServiceCompte.
- On veut pouvoir effectuer plusieurs dépôts.
- Effectuer plusieurs retraits
- Visualiser le solde globale.
- Visualiser la liste des différents mouvements (les montants des dépôts et des
retraits).