Le but est de développer des services Web avec des technologies Open Source. Po
Le but est de développer des services Web avec des technologies Open Source. Pour le déploiement des Web services, nous utilisons Tomcat (moteur de Servlet et de JSP) et Axis (une implémentation Java Open Source de SAOP). Vous aurez aussi à la fin de ce document des informations sur XML-RPC Java qui est une technologie moins «importante» pour développer des web services. Je vous rappelle que la technologie des Web services se base sur trois choses: 1) SOAP (le protocole d'échange de messages XML (requêtes et réponses) entre client et serveur 2) WSDL (Web Service Description Langage) est un langage reposant sur XML dont on se sert pour décrire les services Web offerts. pour la description en XML. 3) UDDI annuaire des descriptions WSDL. I) Téléchargement Je vous conseille donc de télécharger les versions binaires de tomcat et de axis à partir respectivement des sites: http://jakarta.apache.org/ http://ws.apache.org/axis/ Mais vous pouvez trouver par google des sites miroirs plus rapides. Ensuite lire les fichiers help attaches. Définir certaines variables d'environnement Mettre cela par exemple dans un fichier configuration Cela dépend du shell utilisé. Je vous donne un exemple avec bash. Un exemple de ce fichier vous sera donné en TP. JAVA_HOME = LeCheminAVotreJDK CATALINA_HOME = LeCheminInstallationTomcat AXIS_HOME =LeCheminInstallationAxis PATH = ${PATH}:${HOME}/bin (ceci pour accéder au bin local) PATH =${PATH}:${CATALINA_HOME}/bin (accès au bin de tomcat) PATH =${PATH}:${JAVA_HOME}/bin (accès au bin de java) CLASSPATH = ${CLASSPATH}:. (on ajoute le répertoire courant) Ajouter aussi dans le CLASSPATH tous les .jar du répertoire ${AXIS_HOME}/lib Ajouter ce qu’il faut pour utiliser XmlRpc Unsetenv XMLRPC_HOME setenv XMLRRPC_HOME CheminInstallationXmlRP setenv CLASSPATH ${CLASSPATH}:${XMLRPC_HOME}/*.jar remplaçer * par ce qu’il faut. Par exemple mon fichier est : unset JAVA_HOME JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk export JAVA_HOME unset CATALINA_HOME CATALINA_HOME=/usr/local/apache-tomcat-6.0.20 export CATALINA_HOME AXIS_HOME=/usr/local/axis-1_4 export AXIS_HOME # setenv MYSQL_HOME ${HOME}/WebServices/mysql unset PATH PATH=/usr/kerberos/bin:/usr/bin:/bin:/usr/X11R6/bin:/sbin:/usr/sbin:/usr/local/A crobat5/bin # On ajoute tout cela PATH=${PATH}:${HOME}/bin PATH=${PATH}:${CATALINA_HOME}/bin PATH=${JAVA_HOME}/bin:${PATH}:. export PATH # Pour Axis CLASSPATH=${CLASSPATH}:${AXIS_HOME}/lib/axis.jar CLASSPATH=${CLASSPATH}:${AXIS_HOME}/lib/jaxrpc.jar CLASSPATH=${CLASSPATH}:${AXIS_HOME}/lib/commons-discovery-0.2.jar CLASSPATH=${CLASSPATH}:${AXIS_HOME}/lib/saaj.jar CLASSPATH=${CLASSPATH}:${AXIS_HOME}/lib/commons-logging-1.0.4.jar CLASSPATH=${CLASSPATH}:${AXIS_HOME}/lib/log4j-1.2.8.jar CLASSPATH=${CLASSPATH}:${AXIS_HOME}/lib/wsdl4j-1.5.1.jar CLASSPATH=${CLASSPATH}:${AXIS_HOME}/lib/axis-ant.jar CLASSPATH=${CLASSPATH}:/usr/share/java/activation.jar # CLASSPATH=${CLASSPATH}:/usr/xerces-2_5_0/xerces.jar #CLASSPATH=${CLASSPATH}:/usr/xerces-2_5_0/xml-apis.jar #CLASSPATH=${CLASSPATH}:/usr/xerces-2_5_0/xmlParserAPIs.jar #CLASSPATH=${CLASSPATH}:/usr/xerces-2_5_0/xercesSamples.jat export CLASSPATH II) Lier Tomact et Axis Copier le répertoire axis qui se trouve dans ${AXIS_HOME}/webapps dans ${CATALINA_HOME}/webapps/. Ainsi le serveur axis est installé comme une application Web au sein de tomact. Sous shell, il suffit de faire: $ cp ${AXIS_HOME}/webapps/axis ${CATALINA_HOME}/webapps/ Vous pouvez copier cela aussi en utilisant la souris. Tester l’installation lancer tomcat comme suit : $ startup.sh (si vous l’aviez déjà ajoute dans le PATH sinon aller dans ${CATALINA_HOME}/bin ) Vérifier que tomcat tourne correctement dans un navigateur : http://localhost:8080 Valider à présent l’installation d’axis en vérifiant que les paquetages obligatoires sont présents: http://localhost:8080/axis Ensuite, cliquer sur Validate Le message suit doit apparaître : « The core axis librairies are present » III) Développement et déploiement de services Web Développons à présent un service Web Simple que nous déploierons avec Axis. On va créer un service Web qui affiche un message de bienvenue à l’utilisateur. Ce service expose une méthode appelée sayHello(). Cette méthode prend un argument String et retourne un message String au client. Nous allons donc écrire une classe Java HelloService. public class HelloService { String SayHello(String argument) { return “Hello”+argument ; } Le développement du service Web est ainsi terminé : inutile de compiler ce code Java. Comment Déployer ce service ? Axis propose deux manières de déployer un service : 1) En utilisant un fichier JWS 2) En passant un fichier WSDD à AdminClient (voir plus loin) La deuxième approche sera détaillée ultérieurement. La première approche est beaucoup plus simple que la seconde, mais ne permet pas la personnalisation (ne pas exposer que certaines méthodes par exemple) du déploiement. JWS: JWS (Java Web Service) est une technologie d’Apache permettant d’écrire rapidement un service web qui se déploie instantanément une fois la source mis dans un répertoire particulier. Il suffit de copier HelloService.java dans ${CATALINA_HOME}/webapps/axis/ en le renommant HelloService.jws, sans compilation! Sous shell, il suffit de faire la commande. $ cp HelloService.java ${CATALINA_HOME}webapps/axis/HelloService.jws C’est fini votre Web service est prêt et il est accessible avec l'URL: http://localhost:8080/axis/HelloService.jws Vous devez alors constater que votre service a été bien déployé sur "axis" en ayant en retour la page HTML suivante: There is a Web Service Here Click to see the WSDL Si vous cliquez sur ce lien, vous voyez la définition "WSDL" (généré automatiquement par Axis de votre service Web). Si cette description n’apparaît pas (sur certains navigateurs), vous pouvez toujours la stocker localement et la visualiser. La description WSDL est générée à la volée est maintenant accessible sous : http://localhost:8080/axis/HelloService.jws?wsdl Cette description est utile pour tout client souhaitant accéder au service en générant ou non les stubs nécessaires. Analyser cette description et retrouver votre méthode et les paramètres et le point d’accès (endpoint). Tester également: http://localhost:8080/axis/index.html Cliquer sur view et que voit-on apparaître ? IV) Exécution du service Web IV-1) Sans développer de client Java Votre service est accessible à travers tout le net. Dans un premier temps, on va exécuter la méthode sayHello() sans écrire de client Java, mais on aura uniquement des réponses SOAP. Pour exécuter cette méthode et obtenir une réponse "SOAP" correspondante, il suffit de mettre l'URL suivante dans votre navigateur: http://localhost:8080/axis/HelloService.jws?method=sayHello Et pour passer un argument à sayHello, faire: http://localhost:8080/axis/HelloServic?method=sayHello&argument="ouahidi" La réponse affichée est le contenu "SOAP", c'est à dire un fichier XML. Sur certains navigateurs vous verrez : Hello ouahidi IV-2) On va écrire un client Java qui appelle note service Web. On verra par la suite qu'il existe plusieurs manières. Ici on ne se sert pas de la définition WSDL pour générer le client. Voici une plus simple. import org.apache.axis.client.*; import javax.xml.namespace.QName; public class TestHelloService{ public static void main(String[] args) { try { // Tomcat est lance par startup.sh sur la machine locale // Le port utilise est 8080 qui peut être change dans server.xml (voir // $ {CATALINA_HOME}/conf/server.xml // enpoint est l'URL du serveur Web String endpoint ="http://localhost:8080/axis/HelloService.jws"; // On Crée l'objet service. Cela suppose que le client (call par la // suite) construit tous les paramètres et non pas les prend à // partir de wsdl du serveur Service service = new Service(); // Contruction d'un objet call permettant de construire la requête et // // réponse SOAP Call call = (Call) service.createCall(); // On crée un objet associé a l'URL endpoint call.setTargetEndpointAddress(new java.net.URL(endpoint)); // On précise la méthode à exécuter (ici on une seule) call.setOperationName("sayHello"); //On invoque avec les paramètres (tableau d'Object) et on reçoit le //résultat. String ret = (String) call.invoke(new Object[] {"Ouahidi"}); System.out.println(ret); } catch (Exception e) { System.err.println(e.toString()); } } } Compiler et exécuter. $ javac TestHelloService.java $ java TestHelloService Hello ouahidi On verra d’autres manières d’écrire les clients. A présent construisons un autre exemple avec toujours la même manière de déploiement, c’est à dire avec un fichier JWS. Ecrire une «super-calculatrice» ayant les méthodes somme(int,int) et produit(int,int) pour l'instant (soyons modeste :) • Écriture du service web : il s'agit de votre fichier CalculService.java (écrit très simplement : aucun import, pas d'héritage, etc...) • Déploiement : il suffit de copier le fichier CalculService.java dans le répertoire ${CATALINA_HOME}webapps/axis en le renommant en CalculService.jws Public class CalculService{ Public int somme (int a, int b) { return a+b ;} Public int produit(int a, int b){ return a*b ;} public int soustration(int a, int b) {return a-b;} } Exécution à travers un navigateur : Tester : http://localhost:8080/axis/CalculService.jws?wsdl Analyser sa description WSDL et retrouver les méthodes métier, les paramètres, et le point d'accès (endpoint). http://localhost:8080/axis/CalculService.jws?method=somme&a=3&b=5 http://localhost:8080/axis/CalculService.jws?method=produit&a=3&b=5 Développons un client Java // Permet de tester CalculService.jws qui a trois méthodes somme et produit, et soustraction. // Ce fichier est mis dans ${CATALINA_HOME}/webapps/axis/CalculService.jws // Attention à l'extension jws et non pas java import org.apache.axis.client.Call; import org.apache.axis.client.Service; import javax.xml.namespace.QName; public class TestCalculService{ public static void main(String[] args) { try { // enpoint est l'URL du serveur Web String endpoint ="http://localhost:8080/axis/CalculService.jws"; Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new java.net.URL(endpoint)); // On précise la méthode à exécuter est somme call.setOperationName("somme"); // On invoque avec les paramètres (tableau d'Objet) et on // reçoit le résultat. //les deux entiers Integer i = new Integer(5); Integer j = new Integer(7); Integer ret = (Integer) call.invoke(new Object[] {i,j}); System.out.println("Somme = "+ret.intValue()); // l’autre méthode si l’on veut // On précise la méthode a exécuter est produit call.setOperationName("produit"); // On invoke ret = (Integer) call.invoke(new Object[] {i,j}); System.out.println("produit = "+ret.intValue()); = "+ret.intValue()); } catch (Exception e) { System.err.println(e.toString()); } } } V) Approche WSDD On va maintenant aborder une autre approche de déploiement des services web. Le fichier JWS offre le moyen le plus rapide et le plus simple de déployer un service Web sous Axis. Il ne permet cependant pas de personnaliser le déploiement. En outre, il laisse le code source sur le serveur à disposition d’éventuels pirates et ne permet pas de décider d’une expression sélective de certaines méthodes. Pour ce faire, Axis propose une manière de personnaliser le déploiement: WSDD (Web Service Delloyment Descriptor), le descripteur de déploiement de service Web. Le WSDD est un document XML (toujours lui). Il contient les informations sur le service Web à déployer et spécifier le nom de la classe uploads/s1/ exo-web-services.pdf
Documents similaires










-
50
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Dec 07, 2021
- Catégorie Administration
- Langue French
- Taille du fichier 0.2346MB