vers l'accueil formulaire de contact

Tutoriel web services N°2 : création web service Java 6

Votre formation WEB SERVICES  avec Objis, spécialiste formation java depuis 2005 Utilisez Java6 (et seulement java6) pour créer et publier votre premier web service opérationnel. Mettez en oeuvre l’API JAX-WS. Comprenez le lien entre JAX-WS, JAXB et l’API de bas niveau SAAJ. Découvrez l’interface WSDL du service suite au déploiement de ce dernier. Comprenez les annotations @WebService et @SoapBinding. Identifiez enfin les limites de ce web service.

Liens utiles

- + de 100 tutoriaux java/jee Objis
- Tutoriel et formation Web Services
- Objis, spécialiste formation java depuis 2005

Objectif

- Bonne pratique création un service web (code first) avec Jax-WS
- Relation entre API haut niveau JAX-WS et bas niveau SAAJ
- Annotations @WebService, @WebMethod, @SOAPBinding
- Identifier les spécifications clés des services web et leurs valeur ajoutée
- Analyser le fichier WSDL du web service
- Comprendre impact du stylede Binding (RPC / Document) du le Wsdl
- Analyse de trames SOAP

Programme

- Contexte
- Méthodologie création web service
- Partie 1 : interface du service web
- Partie 2 : implémentation
- Partie 3 : publication
- Partie 4 : test
- Partie 5 : modification du binding
- Partie 6 : client Java
- Partie 7 : monitoring

Contexte

Pas besoin de l’artillerie lourde (cxf, axis, jbossws, metro...) pour créer votre premier service web. Java6 suffit ! En particluiers avec l’intégration des API suivantes :

- JAX-WS (API haut niveau) : javax.xml.ws
- SAAJ (API bas niveau) : javax.xml.soap
- Annotations Web services (faciliter développement) : javax.jws

Reste à s’y retrouver...

PNG - 81.1 ko
monde-web-services-jax-ws

JAX-WS

L’API JAX-WS permet au développeur d’effectuer des taches haut niveau sur les services web (manipuler l’en tête, enveloppe...). En arrière plan JAX-WS utilise l’API de bas niveau SAAJ (voir plus bas).

En particulier, l’API JAX-WS (Java API for XML Web Services) , qui était fournie avant java 6 sous forme d’une librairie tierce, fait désormais partie de java 6.

PNG - 17.9 ko
tutoriel-creation-webservice-java-6-api-jax-ws

SAAJ

L’API SAAJ permettra au développeur d’effectuer des taches bas niveau sur les services web (manipuler l’en tête, enveloppe...).

- A partir de la documentation Java 6, identifiez le package javax.xml.soap de l’API SAAJ :

PNG - 11.3 ko
tutoriel-creation-webservice-java-6-api-saaj

Métadonnées

- A partir de la documentation Java 6, identifiez les packages suivants :

— Package javax.jws

PNG - 4.1 ko
tutoriel-creation-webservice-java-6-api-javax-ws

— Package javax.jws.soap

PNG - 5.2 ko
tutoriel-creation-webservice-java-6-api-javax-ws-soap

Ces packages fournissent les annotations (métadonnées) permettant , à haut niveau de créer et utiliser les web services. Une occasion pour le développeur de masquer la complexité inhérente aux web services.

Méthodologie

1) Création de l’interface du service

2) Création de l’implémentation du service

3) Publication du service web

Partie 1 : interface

Le web service que nous allons créer expose une seule opération : ditBonjour()

PNG - 7.1 ko
tutoriel-webservice-creation-webservice-java6-simple-3

- Compilez
- A partir de la javadoc de l’API JAX-WS, Expliquez l’annotation @WebService (javax.jws.WebService)
- a quoi sert l’annotation @SoapBinding ?
- Qu’est ce que le style RPC ? Existe t’il d’autres ’Style’ ? Lesquels ? Quelles différences avec RPC ?

Partie 2 : implémentation

PNG - 9.2 ko
tutoriel-webservices-installation-metro-integration-tomcat-4

- Analysez le code suivant

- Compilez

Partie 3 : publication

- Analysez le programme suivant.

PNG - 14.9 ko
tutoriel-webservice-creation-webservice-java6-simple-5

- Compilez

- Lancez le programme :

PNG - 2.8 ko
tutoriel-webservice-creation-webservice-java6-simple-1

Partie 4 : Test

- Que se passe t’il aux adresses suivantes :
— http://localhost:8888
— http://localhost:8888/hello

récupération WSDL

Par convention , vous pouvez récupérer le WSDL d’un service web en ajoutant la chaine ’ ?wsdl’ à la fin de l’URL du service web.

- Allez sur http://localhost:8888/hello ?wsdl

PNG - 46.6 ko
tutoriel-webservice-creation-webservice-java6-simple-6

- En utilisant les spécifications WSDL 1.1, expliquez les principales sections du WSDL :
— port-type
— message
— service
— bindings
— types

- Lancez un nouveau navigateur, et allez sur http://localhost:8888/hello ?wsdl . Que se pass t’il ?

Limitations

1) Notre code ne sait pas gérer plusieurs appels au service web (multithreading).

INFO : l’utilisation d’un serveur d’application permet de gérer ce problème (1 thread par utilisateur)

2) Notre WSDL impose un protocole de transport (ici http, déclaré dans la section ’services’).

INFO : la spécification WS-Adressing répond à cette problématique.

Partie 5 : Modifier le Binding RPC —> DOCUMENT

- Remplacez dans la définition de l’interface du service web la ligne 7 (@SOAPBinding(style = SOAPBinding.Style.RPC)) par @SOAPBinding(style = SOAPBinding.Style.DOCUMENT)

- Analysez l’impact sur le WSDL produit

PNG - 62 ko
tutoriel-webservice-jaxws-binding-jaxb-0-12

- Expliquez

- Quelle valeur ajoutée ?

Partie 6 : client Java

- En utilisant l’outil wsimport du jdk, créer les classes et interfaces nécessaires au code d’un client java du service. En particuliers, expliquez la commande : wsimport -p client http://localhost:8888/hello ?wsdl -keep
- Codez un client MonClientWebServiceHello.java réalisant les 3 taches suivantes :
— Instancier le service
— récupérer le savoir-faire du service
— lancer la méthode ditBonjour() du service

- Exécutez le client : java MonClientWebServiceHello

- Expliquez le rôle de l’outil wsgen du jdk

Partie 6 : monitoring

Monitoring intrusif

En utilisant Metro (implémentation de référence de JAX-WS), capturez les trames SOAP échangées.

Monitoring non intrusif

En utilisant Tcpdump ou WinDump , capturez les trames échangées entre le client et le client web et le web service.

projet eclipse

Zip - 4.5 ko
demowebservicejava6

Partie 7 : services plus complexe

Notez que le web service était simple : pas de paramètre pour la méthode ditBonjour(), et type de retour simple (ici chaîne). Mais comment gérer un service web qui doit gérer et retourner des types Objets ? Comment coder le client du service web ?

C’est là que va intervenir JAXB, et des outils java6 comme wsgen et wsimport.

- Expliquez.

Conclusion

Dans ce tutoriel, vous avez créez puis déployé un web service en utilisant l’implémentation de JAX-WS présente dans Java6.

Formation web services

Le chemin le plus court pour avoir les réflexes et la méthodologie du bon développeur web services.

Votre formation WEB SERVICES  avec Objis, spécialiste formation java depuis 2005

Pour aller plus loin : le Club Objis

Si vous appréciez notre sens du partage, devenez gratuitement membre ’classic’ du Club Objis :
- Votez pour les prochains tutoriaux à publier
- Préparez vos entretiens techniques
- Valorisez votre profil / expertise
- Identifiez des opportunités d’emploi
- Recevez la newsletter objis.com