Accueil

Déploiement et Appel aux web services Java avec Axis

 Notes :

 

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/

http://dico.developpez.com

http://ws.apache.org/axis/

Mohamed KARAMI