Académique Documents
Professionnel Documents
Culture Documents
avec Axis
I - Remerciements
II - Lancement et configuration d'Axis
II-A - Configuration de Tomcat
II-B - Démarrage de Tomcat
II-C - Démarrage d'Axis
III - Méthode de déploiement 1
III-A - Création du web service
III-B - Déploiement du web service
III-C - Test du web service
IV - Méthode de déploiement 2
IV-A - Compilation de la classe du web service
IV-B - Définition du descripteur de déploiement
IV-C - Déploiement du web service
IV-D - Exécution du web service par son alias
V - Consommer le web service en Java
V-A - Création du fichier de description du web service "wsdl"
V-B - Utilisation du générateur " WSDL2Java "
V-C - Définition du client Java
VI - Désactivation du web service
-2-
Copyright © - karami. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de domages
et intérêts.
http://karamimed.developpez.com/j2ee/tutoriels/axis/
Déploiement et Appel aux web services Java avec Axis par Mohamed KARAMI
• Axis 1.4
• Apache Tomcat 5.5.17
• Eclipse 2.1
I - Remerciements
Merci à Neo41 pour sa lecture et ses corrections, à RideKick pour sa relecture. Merci à Ricky81 pour ses conseils,
et un grand merci également à Nono40, réalisateur de l'éditeur xml.
-3-
Copyright © - karami. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de domages
et intérêts.
http://karamimed.developpez.com/j2ee/tutoriels/axis/
Déploiement et Appel aux web services Java avec Axis par Mohamed KARAMI
Le serveur de déploiement " Axis " est installé comme une application Web au sein du moteur de servlets et de
JSP " Apache Tomcat ".
Note :
Pour réaliser notre web service dans les meilleures conditions, c'est préférable de faire une installation
standard de Tomcat et la machine virtuelle JDK, en effet pendant l'installation ne changer pas les chemins
d'installation standard, car sinon on peut se retrouver dans des situations où on aura des erreurs étranges et
difficiles à interpréter.
Avant de lancer Tomact vous devez vérifier que Tomcat pointe sur le JDK et non pas le JRE, car ceci peut causer
une erreur assez fréquente concernant le fichier tools.jar (tools.jar est présent dans le dossier "lib" du JDK mais il
n'existe pas dans le JRE), et voici l'erreur que vous pouvez avoir : "java.lang.RuntimeException: No compiler found
in your classpath! (you may need to add 'tools.jar')". Donc votre Java Virtual Machine doit être comme ceci :
"JAVA_HOME\jre\bin\server\jvm.dll".
-4-
Copyright © - karami. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de domages
et intérêts.
http://karamimed.developpez.com/j2ee/tutoriels/axis/
Déploiement et Appel aux web services Java avec Axis par Mohamed KARAMI
Vous devez, pour accéder aux possibilités de " Axis ", activer préalablement le serveur " Apache Tomcat " (j'utilise
la version 5.5.17 de Tomcat). Pour cela, sous Tomcat 4, vous double-cliquez sur : "dossierInstallation\Tomcat
4\bin\startup.bat". Sous Tomcat 5.5.x, vous double-cliquez sur : "dossierInstallation\Tomcat 5.5\bin\tomcat5.exe".
Ou tout simplement, si le service Tomcat est installé, utiliser "Monitor Tomcat" puis le menu "Start Service".
-5-
Copyright © - karami. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de domages
et intérêts.
http://karamimed.developpez.com/j2ee/tutoriels/axis/
Déploiement et Appel aux web services Java avec Axis par Mohamed KARAMI
Pour installer Axis (j'utilise la version 1.4), décompresser le fichier "axis-bin-1_4.zip", puis copier le dossier
"axis-1_4\webapps\axis" dans "dossierInstallation\Tomcat 5.5\webapps\", comme ça Axis sera une application web
déployée sous Tomcat. Il vous manquera la librairie "activation.jar" et d'autres optionnelles: "soap.jar" et "mail.jar",#
que vous pouvez copier dans "dossierInstallation\Tomcat 5.5\common\lib\". Pour vérifier la bonne installation et
éventuellement accéder aux services web existants sur " Axis ", vous redémarrez Tomcat et vous tapez dans un
navigateur : http://localhost:8080/axis. Ensuite, vous pouvez cliquer sur " Validate " puis "List":
-6-
Copyright © - karami. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de domages
et intérêts.
http://karamimed.developpez.com/j2ee/tutoriels/axis/
Déploiement et Appel aux web services Java avec Axis par Mohamed KARAMI
-7-
Copyright © - karami. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de domages
et intérêts.
http://karamimed.developpez.com/j2ee/tutoriels/axis/
Déploiement et Appel aux web services Java avec Axis par Mohamed KARAMI
La première étape consiste à définir la classe du service web qui retournera au client la somme de 2 entiers.
Le web service
public class sommer {
public int getsomme(int a, int b) {
return a+b;
}
}
Utilisez un éditeur de texte simple, Kate sous Unix ou Bloc-notes sous Windows.
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 : "sommer.jws".
La deuxième étape consiste à déployer le service au sein d'un fournisseur de services web. L'environnement
d'exécution et de déploiement des services web que nous utilisons est, comme vous l'avez déjà constaté, l'outil "
Axis ". Le premier mode de déploiement sous " Axis " que nous allons mettre en oeuvre est le plus simple qui soit ;
c'est le déploiement instantané par fichier " JWS ". Vous noterez qu'il n'est pas nécessaire de compiler le fichier
source java.
Pour réaliser le déploiement, il suffit de copier le fichier "sommer.jws" dans le domaine applicatif de " Axis ". Le
domaine d'application de " Axis " est : "dossierTomcat/webapps/axis", vous devez donc copier le fichier
"sommer.jws" dans ce dossier.
Vous êtes désormais en mesure d'accéder à votre service à l'URL suivante : http://localhost:8080/axis/sommer.jws.
Vous devez alors constater que votre service a bien été déployé sur " Axis " en ayant en retour la page " html "
suivante :
-8-
Copyright © - karami. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de domages
et intérêts.
http://karamimed.developpez.com/j2ee/tutoriels/axis/
Déploiement et Appel aux web services Java avec Axis par Mohamed KARAMI
Si vous cliquez sur ce dernier lien, vous verrez la définition " WSDL " (générée automatiquement par " Axis ") de
votre service web.
La dernière étape consiste à mettre en oeuvre votre service qui est désormais accessible à travers tout le net !
Pour exécuter une méthode de votre service et obtenir la réponse " SOAP " correspondante, vous tapez
l'expression suivante dans votre navigateur :
http://localhost:8080/axis/sommer.jws?method=getsomme&a=2&b=3
Par rapport à l'expression précédente, vous précisez ici le nom de la méthode à exécuter, sous la forme de la
valeur de l'attribut " method " et vous précisez les valeurs des paramètres a et b. La réponse affichée est le
contenu " SOAP ", c'est-à-dire un fichier " XML " dont voici un extrait :
-9-
Copyright © - karami. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de domages
et intérêts.
http://karamimed.developpez.com/j2ee/tutoriels/axis/
Déploiement et Appel aux web services Java avec Axis par Mohamed KARAMI
- 10 -
Copyright © - karami. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de domages
et intérêts.
http://karamimed.developpez.com/j2ee/tutoriels/axis/
Déploiement et Appel aux web services Java avec Axis par Mohamed KARAMI
IV - Méthode de déploiement 2
Dans l'exercice précédent, nous avons mis en oeuvre un mode de déploiement entièrement pris en charge par "
Axis ". Ce mode automatique de déploiement présente les contraintes suivantes : Nécessité de disposer des
sources des classes dont on veut définir le ou les services. En effet, le mode de déploiement automatique d'Axis
travaille sur la source des classes Java, Impossibilité de décrire des particularités de déploiement (classes
publiques et privées). Ce sont pour ces raisons, que nous devons parfois réaliser un déploiement explicite. Cela
implique la définition d'un fichier particulier, appelé descripteur de déploiement du service web. Ce fichier porte
l'extension " wsdd " pour "Web Service Deployment Descriptor".
La première étape consiste à compiler la classe que vous avez définie, renommer le fichier "sommer.jws" en
"sommer.java" et compiler le par commande "javac sommer.java", après vous devez copier la classe résultante
dans le dossier des "jwsClasses"
Le descripteur de déploiement doit être placé dans le même dossier que le " .wsdl " définissant le service.
Appelons ce descripteur " deploy.wsdd ". Son contenu sera minimalement celui-ci :
Balise de début avec comme attributs les espaces de noms des balises mises en oeuvre dans un
descripteur de déploiement.
deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
Le nom d'invocation du service, avec le mode, ici "RPC". Ce sera le principal mode que nous mettrons
en oeuvre.
service name="sommer" style="RPC"
Ensuite, la classe compilée associée au service
parameter name="className" value="sommer"
Ensuite, les autorisations d'accès au service (ici toutes les méthodes)
parameter name="allowedMethods" value="*"
Fin de la balise "service"
service
Fin de la balise "deployment"
deployment
Le descripteur de déploiement doit être maintenant pris en compte par le serveur " Axis " (i.e. le fournisseur de
services) pour réaliser le déploiement du service. Pour ce faire, il convient d'utiliser l'utilitaire " AdminClient " du
serveur " Axis ".
- 11 -
Copyright © - karami. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de domages
et intérêts.
http://karamimed.developpez.com/j2ee/tutoriels/axis/
Déploiement et Appel aux web services Java avec Axis par Mohamed KARAMI
Si les librairies Axis ne sont pas spécifiées dans le classpath, vous devez le faire comme suit dans un fichier
"deploy.bat" de préférence:
Le classpath
set OLD_CLASSPATH=%CLASSPATH%
set CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\common\lib\activation.jar
set CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\common\lib\mail.jar
set CLASSPATH=%CLASSPATH%;%AXIS_HOME%
set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\axis.jar
set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\jaxrpc.jar
set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\wsdl4j.jar
set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\commons-discovery.jar
set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\commons-logging.jar
set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\saaj.jar
set CLASSPATH=%CLASSPATH%;%AXIS_HOME%\lib\log4j-1.2.4.jar
set CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\common\lib\xerces.jar
set CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\common\lib\servlet-api.jar
set CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\common\lib\naming-factory.jar
set CLASSPATH="%CLASSPATH%"
java - CLASSPATH="%CLASSPATH%" org.apache.axis.client.AdminClient deploy.wsdd
set CLASSPATH=%OLD_CLASSPATH%
Parmi les librairies Axis inclues dans le classpath, il faut faire attention aux versions de quelques unes, donc il
vaux mieux vérifier manuellement la correspondance des noms des fichiers existants dans le dossier "Axis\lib"
et leurs noms dans le classpath définit ci-dessus.
Si vous n'arrivez pas à lancer correctement la commande à l'aide du classpath, vous pouvez décompressez
ces librairies dans le dossier "AXIS_HOME\WEB-INF", ça ne sera pas assez propre comme solution mais
c'est efficace, et vous aurez seulement à lancer la commande : "java org.apache.axis.client.AdminClient
deploy.wsdd"
L'arborescense du dossier Axis (avec l'utilisation du classpath) devra être comme illustré dans la figure suivante :
- 12 -
Copyright © - karami. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de domages
et intérêts.
http://karamimed.developpez.com/j2ee/tutoriels/axis/
Déploiement et Appel aux web services Java avec Axis par Mohamed KARAMI
Nous avons, lors de l'étape précédente, demandé au serveur " Axis " d'être en mesure de traiter toutes les
requêtes " SOAP " correspondant à notre service " sommer ". Cela signifie donc qu'à la réception d'une requête "
HTTP-SOAP ", le serveur pourra appliquer la méthode spécifiée dans la requête à une instance de la classe
correspondant à notre service (en lui passant, le cas échéant des valeurs). Vous êtes désormais en mesure
d'accéder à votre service à l'URL suivante : http://localhost:8080/axis/services/sommer.
Le nom " sommer " correspond au nom du service que nous avons indiqué dans le descripteur de déploiement.
Vous pouvez alors constater que votre service a bien été déployé sur " Axis " en ayant en retour la page " html "
suivante :
- 13 -
Copyright © - karami. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de domages
et intérêts.
http://karamimed.developpez.com/j2ee/tutoriels/axis/
Déploiement et Appel aux web services Java avec Axis par Mohamed KARAMI
La dernière étape consiste à mettre en oeuvre votre service qui est désormais accessible à travers tout le net !
Pour exécuter une méthode de votre service et obtenir la réponse " SOAP " correspondante, vous tapez
l'expression suivante dans votre navigateur :
http://localhost:8080/axis/services/sommer?method=getsomme&a=2&b=3
Par rapport à la méthode précédente, vous précisez ici le nom du web service par son alias (ici "sommer"). La
réponse affichée est le contenu " SOAP ", c'est-à-dire un fichier " XML " comme :
- 14 -
Copyright © - karami. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de domages
et intérêts.
http://karamimed.developpez.com/j2ee/tutoriels/axis/
Déploiement et Appel aux web services Java avec Axis par Mohamed KARAMI
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 à la mise en oeuvre 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:
Pour ce faire, nous utiliserons le même service précédent, dans le navigateur utiliser le menu "Fichier puis
Enregistrer sous", Puis nommer le fichier "sommer.wsdl" dans le dossier "Tomcat 5.5\webapps\axis\WEB-INF".
Note :
"wsdl" signifie selon http://dico.developpez.com: Langage de description des web services, respectant la
syntaxe XML. Il donne une définition abstraite des services, le détail des types de données échangées, les
opérations possibles, le protocole à utiliser ainsi que l'adresse (URL) du service.
L'outil " Axis " qui permet la génération des définitions Java côté client et côté serveur, s'appelle "
org.apache.axis.wsdl.WSDL2Java ". L'invocation depuis une fenêtre DOS, est la commande: "java
org.apache.axis.wsdl.WSDL2Java sommer.wsdl".
Remarque :
le fichier " sommer.wsdl " peut-être créé simplement, comme on l'a déjà fait, en sauvegardant le contenu de la
fenêtre navigateur, lorsque l'on visualise la définition " wsdl " du service :
http://localhost:8080/axis/services/sommer?wsdl . L'outil " WSDL2Java " génère l'ensemble des définitions dans un
sous-dossier correspondant au nom "targetNamespace="http://127.0.0.1:8080/axis/services/sommer"" du
descripteur " wsdl ". En effet, les namespaces sont mappés en packages Java.
- 15 -
Copyright © - karami. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de domages
et intérêts.
http://karamimed.developpez.com/j2ee/tutoriels/axis/
Déploiement et Appel aux web services Java avec Axis par Mohamed KARAMI
Avant de définir le client Java, je commence par clarifier quelques ambiguïtés qui peuvent vous passer par la tête:
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 qui permet à
l'auteur du web service de protéger son code
Quels sont les fichiers aux quels j'ai besoin pour consommer le web service?
NON, c'est seulement le serveur déployant le web service qui doit contenir les librairies Axis
Quels sont les fichiers aux quels j'ai besoin pour consommer le web service?
Nous aurons seulement besoin des fichiers générés (Stub) par la commande 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 oeuvre les classes générées lors de l'étape précédente. Pour cela,
votre client ressemblera à ceci :
Client Java
import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import _1._0._0._127.axis.sommer_jws.*;
public class SommerClient {
public static void main(String[] args) {
// Création du service depuis le endpoint
// SommerService correspond au nom du service dans le fichier "wsdl"
// c'est la balise : wsdl:service name="sommerService"
SommerService service = new SommerServiceLocator();
try {
// Utilisation du service pour obtenir un stub qui implemente le SDI
// (Service Definition Type ; i.e. PortType).
// Pour le typage, c'est la balise : wsdl:portType name="sommer"
// Pour le getsommer(), le sommer correspond à la balise :
// wsdl:port binding="impl:sommerSoapBinding" name="sommer"
Sommer port = service.getsommer();
int s;
try {
// Mise en oeuvre du service par application directe des méthodes
s = port.getsomme(2, 3);
System.out.println("2+3 = " + s);
} catch (RemoteException e1) {
e1.printStackTrace();
}
} catch (ServiceException e) {
e.printStackTrace();
}
}
}
Sous Eclipse vous aurez comme ceci (j'ai utilisé "http://127.0.0.1" au lieu de "http://localhost", c'est pourquoi j'ai le
chemin généré "_1._0._0.127":
- 16 -
Copyright © - karami. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de domages
et intérêts.
http://karamimed.developpez.com/j2ee/tutoriels/axis/
Déploiement et Appel aux web services Java avec Axis par Mohamed KARAMI
Pour connaître les noms des classes et interfaces à utiliser, vous devez examiner le contenu du dossier contenant
les classes et interfaces générées ainsi que le fichier " wsdl " ayant permis cette génération.
- 17 -
Copyright © - karami. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de domages
et intérêts.
http://karamimed.developpez.com/j2ee/tutoriels/axis/
Déploiement et Appel aux web services Java avec Axis par Mohamed KARAMI
Enfin pour retirer un service déployé, il suffit d'appliquer l'utilitaire " AdminClient ", créer un fichier " undeploy.wsdd
" correspondant au service. Le contenu du fichier " undeploy.wsdd " sera toujours le même, au nom de service
près. Pour le service " sommer ", nous aurons :
- 18 -
Copyright © - karami. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents,
images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de domages
et intérêts.
http://karamimed.developpez.com/j2ee/tutoriels/axis/