Déploiement et Appel aux web
services Java avec Axis
Outils utilisés :
I-
Lancement et configuration d’Axis
Le serveur de déploiement « Axis » est installé comme une
application Web au sein du moteur de servlets et de JSPs « Apache Tomcat ».
1-
Démarrage de Tomcat
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 ».

2- Démarrage
d’Axis
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 « Validation» puis « List » :
La
validation teste l’existence des librairies requises par Axis :

II-
Méthode 1
a-
Création du web service
La première étape consiste à définir la classe du service web
qui retournera au client la somme de 2 entiers.
La
définition de cette classe est la suivante :
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 ».
b-
Déploiement du web service
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 œuvre 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
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 :

Si
vous cliquez sur ce dernier lien, vous verrez la définition « WSDL » (générée
automatiquement par « Axis ») de votre service web.

c-
Test du web service
La dernière étape consiste à mettre en œuvre 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 :

III-
Méthode 2
Dans l’exercice précédent, nous avons mis en œuvre 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 ».
a-
Création du fichier de
description du web service « wsdl »
La première étape consiste à compiler la classe que vous avez
définie. Pour ce faire, nous utiliserons le même service précédent, dans le navigateur
utiliser le menu « Fichierè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.
b- définition
du descripteur de déploiement
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 :
<deployment
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service
name="sommer" style="java:RPC">
<parameter
name="className" value="sommer"/>
<parameter
name="allowedMethods" value="*"/>
</service>
</deployment>
Expliquons
les différents éléments :
Balise
de début avec comme attributes les espaces de noms des balises mises en œuvre
dans un descripteur de deployment.
<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>
c- déploiement
du web service
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 «
Acxis ».
La
ligne de commande est alors :
« java
org.apache.axis.client.AdminClient deploy.wsdd »
Si
les librairies Axis ne sont pas spésifiées dans le classpath, vous devez le
faire comme suit dans un fichier « .bat » de préférence :
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%
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 :

d- exécution
du web service par son alias
La dernière étape consiste à mettre en œuvre 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 :

IV-
Consommer le web service en 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 œuvre, et surtout à l’intégration
avec d’autres applications. Ce deuxième modèle consiste à la mise en œuvre 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 œuvre du service depuis Java.
Ce
modèle est caractérisé par :
a- 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 «
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.

b- Définition
du client Java
Vous
devez ensuite définir 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 :
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… »:

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.
V-
Désactivation du web service
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 :
<undeployment
xmlns="http://xml.apache.org/axis/wsdd/">
<service name="sommer"/>
</undeployment>
Ensuite,
la ligne de commande est simplement :
“java org.apache.axis.client.AdminClient
undeploy.wsdd”.
Bibliographies:
http://www.developpez.net/forums/
Mohamed KARAMI