0% ont trouvé ce document utile (0 vote)
47 vues60 pages

Chap5JAX WSFinal

Transféré par

md
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
47 vues60 pages

Chap5JAX WSFinal

Transféré par

md
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Développement de Services Web avec JAX-

WS
Cheyma ben njima
Plan

 Généralités

 Développement serveur

 Développement client

 Les annotations JAX-WS


Généralités JAX-WS
 JAX-WS est l’acronyme Java API de XML Web
Services

 JAX-WS est à la fois un standard et une implémentation

 La version courante est JAX-WS 2.2

 Précédemment JAX-WS s’appelait JAX-RPC

 JAX-WS fait partie de la plate forme Java EE de Sun


Microsystems
JAX-WS : JSR
 JAX-WS s’appuie sur le JSR 224 (Java
Specification Request) :

JSR : définition
•Le JCP (Java Community Process) est le processus chargé
de définir les évolutions de Java

• Chaque évolution est traitée sous la forme de propositions


nommées JSR (Java Specification Request)

• Chaque JSR possède un numéro (identifiant unique)


JAX-WS : JSR 224
 JAX-WS propose un ensemble d’API pour l’implémentation
de services Web avec Java

 Facilite l’envoie et la réception de message SOAP en


masquant la complexité du langage au développeur

 Le fournisseur et le consommateur de service n’ont pas


besoin de traiter les messages SOAP

 Le traitement de bas niveau est réalisé par JAX-WS


JAX-WS : JSRs
 La spécification JAX-WS dépend d’autres spécifications
définies dans d’autres JSRs :

 JSR 109 : Web Services. Cette JSR définit le modèle de


programmation et d’exécution de services web (EJB) sur JEE

 JSR 181 : Web Services Metadata. Propose des annotations qui


facilitent la définition et le déploiement de services web.

 JSR 222 : JAXB. Propose un ensemble d’API pour permettre le


parsing de Java en XML (et vice versa).

 JSR 250 : Common Annotations. Propose des annotations utilisable


par des composants définie JEE ou en java (JSE)
JAX-WS: modèles de programmation

• Modèle de programmation côté serveur


• Permet le développement de services web sous forme de
servlets ou des EJB (Entreprise Java Bean)

• Modèle de programmation côté client


• Permet l’accès à un service web distant
JAX-WS Annotations
• Les annotations jouent un rôle important dans
JAX-WS
1. Les annotations sont utilisées pour le mapping de Java
en WSDL
2. Les annotations sont utilisées lors de l’exécution pour
contrôler et répondre aux invocations du service

• Les annotations utilisées par JAX-WS sont définies


dans des JSRs séparées :
 JSR 224 : JAX-WS
 JSR 181 : Web Services Metadata
 JSR 222 : JAXB
 JSR 250 : Common Annotations
JAX-WS : Développement serveur
Développement Serveur : Top/Down et Bottom/Up
Deux façons pour développer un Service Web avec JAX-WS :
 Approche Bottom / Up (à partir d’un POJO)
POJO (Plain Old Java Object)
 Créer et annoter un POJO
 Compiler, déployer et tester
 Le document WSDL est automatiquement généré

 Approche Top / Down (à partir d’un document WSDL)


 Génération des différentes classes Java (JAXB et squelette du Web
Service) en utilisant l’outil wsimport
 Compléter le squelette de classe de l’implémentation
 Compiler, déployer et tester
Approche Bottom up : principe
1. Définir un POJO implémentant le service
2. Ajouter l’annotation @WebService au POJO
3. Déployer l’application
4. Le document WSDL est généré automatiquement
 URL du Service : [Link]

NB:
 Toutes les méthode du POJO sont des opérations
du Web Service
 Ne supporte pas la surcharge de méthodes
Exemple : CalculatorWS web service

Annotation
Exemple 1 : CalculatorWS
@WebService
 Annote une classe Java pour définir l’implémentation du
Service Web
 Annote une interface Java pour définir la description du Service
Web
 Attributs de l’annotation @WebService
 String name : nom du Service Web (valeur de l’attribut name de
l’élément wsdl:PortType)
 String endpointInterface : nom de l’interface décrivant le Service Web
(SEI = service Endpoint Interface)
 String portName : nom du endpoint ou le service est publié (valeur de
l’attribut name de l’élément wsdl:Port)
 String serviceName : nom du Service Web (valeur de l’attribut name
de l’élément wsdl:service)
 String targetNamespace : le namespace du Service Web
 String wsdlLocation : l’emplacement du WSDL décrivant le Service
Web
@Webmethod
 Annote une méthode d’une classe Java exposée comme
une opération du Service Web

 Attributs de l’annotation : @WebMethod


 String action : l’action de l’opération. Dans le cas d’un binding
SOAP, cela détermine la valeur de l’action SOAP
 boolean exclude : précise que la méthode ne doit pas être
exposée comme une opération. Ne pas utiliser dans une
interface Java
 String operationName : précise le nom de l’attribut name défini
dans l’élément operation du document WSDL
Exemple 2 : SEI Interface(Service Endpoint Interface)
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
//Service Endpoint Interface
@WebService
@SOAPBinding(style = [Link])
public interface HelloWorld
{
@WebMethod
String getHelloWorldAsString();
}
Exemple 2 : SEI Class
package [Link] ;
import [Link];
//Service Implementation Class

@WebService(endpointInterface="[Link]")

public class HelloWorldImpl implements HelloWorld


{
@Override

public String getHelloWorldAsString()


{
return "Hello World JAX-WS";
}
}
Approche Bottom up : déploiement
 Différentes catégories de serveurs d’application pour gérer
les Services Web avec JAX-WS

 Conteneur Web : Service Web Servlet


 Nécessite une configuration explicite du Service Web
 Exemple : Tomcat

 Conteneur EJB : EJB Web service endpoint


 Gestion respectant JSR 109
 La gestion du Service Web est transparente et maintenue par
le serveur d’application
 Exemple : Glassfish
Service Web (Servlet) : développement

 Création d’un projet Web dynamique

 Création d’un service web : Projet -> New web


service

 Ajouter les opérations nécessaires

 Déployer sous un conteneur Web


Service Web (Servlet) : Exemple
 Java

 WSDL
Service Web (Servlet) : Test
Service Web (Servlet) : Test
[Link]

La somme des deux nombres est


affichée
Service Web : EJB (JSR 109)
 JSR 109 définit le modèle de programmation et l'architecture
d'exécution permettant le déploiement de services Web dans les
conteneurs EJB
 J EE permet le développement de web services sous forme de
Stateless Session EJB
Service Web : EJB (JSR 109)
Stateless Session Bean
 Un Stateless Session Bean est une collection de services dont
chacun est représenté par une méthode.
 Stateless signifie que le service est autonome dans son exécution
et donc qu’il ne dépend pas d’un contexte particulier ou d’un
autre service.
 Il n’y a pas de sauvegarde d’aucun état entre deux invocations
de méthodes.
 Lorsqu’une application cliente appelle une méthode d’un
Session Bean, celui-ci exécute la méthode et retourne le
résultat.
 Meilleure performance des EJBs de type stateless : plusieurs
instances utilisent la même instance d’EJB.
Choix d’un stateless EJB

 Pour améliorer les performances, vous pouvez choisir


d’utiliser un Stateless Session Bean s’il a l’une de ces
caractéristiques :
 L’état du Bean n’a pas de donnée spécifique à un client.
 Dans un seul appel de méthodes, le Bean accomplit une tâche
générique pour tous les clients (envoi d’un email qui confirme
une commande en ligne).
 Le Bean récupère d’une base de données un ensemble de
données en lecture seule qui sont souvent utilisées par les
clients.
Avantages : EJB to Web Service
 Les avantages à transformer un EJB Session en
Service Web

 Hétérogénéité : le client n’est pas forcément écrit en


Java

 Réutilisabilité du code

 Modularité : avec les annotations JAX-WS possibilité


de masquer les méthodes qui ne doivent pas être
découvertes
Service Web (EJB) : Développement
 Création d’un EJB Session de type stateless ayant une interface
remote

 Création d’un Service Web à partir de l’EJB

 Ajouter les annotations suivantes :

 @WebService : déclare l’EJB comme un service web


 @WebMethod : indique que c’est une opération du service web
 @WebResult : définit le nom du paramètre de sortie de la méthode
 @WebParam : définit le nom du paramètre que l’on veut avoir. Par défaut
ce sera arg0, arg1…
Service Web (EJB) : Déploiement
 Déployer sous un conteneur EJB (ex. Glassfish)
 Le conteneur EJB s’occupe de la gestion du Service Web
 Aucune Servlet n’est nécessaire

 Le document WSDL est généré automatiquement en


respectant les valeurs par défauts
 URL du WSDL : [Link]

 Toutes les méthodes de l’EJB sont par défaut des opérations


du Service Web
Service Web (EJB) : Exemple

Annotation d’un simple POJO:


•@stateless : permettant de déclarer cette
classe en tant Stateless Session Bean
•Les deux seuls éléments obligatoires
pour définir un accès de type service web
sont les annotations @WebService et
@WebMethod.
Service Web (Servlet) vs Service Web (EJB)
En résumé l’approche Bottom-up
Le développement d’un service Web
Développement Serveur : Top/Down
 A partir d’un document WSDL :
 Génération des différentes classes Java (JAXB et squelette du
Web Service) en utilisant l’outil wsimport
 Compléter le squelette de classe de l’implémentation
 Compiler, déployer et tester
 wsimport en ligne de commande
 Windows :

 Linux
L’approche Top-down : wsdl to java
JAXB
 Java Architecture for XML Binding (JAXB)
 JAXB est une spécification qui permet de faire correspondre :
 Un schema XML à un ensemble de classes (désérialisation ou
unmarshalling)
 Un ensemble de classes à un schema XML (sérialisation ou
marshalling)
Architecture JAXB
JAXB : marshaling/unmarshaling
Top Down : JAXB XML schema to java
Top Down : l’implémentation de l’interface
JAX-WS : Développement client
Principe
Création d’un service Web Client
 Le modèle de programmation client pour JAX-WS est
appelé client Dynamic Proxy
 Le client Dynamic Proxy appelle un service Web reposant
sur une interface SEI (Service Endpoint Interface)
 Après la création du proxy, l'application client peut appeler
les méthodes sur le proxy
L’outil wsimport
 wsimport est l’outil JAX-WS pour la programmation d’un
client dynamic proxy
 L’outil wsimport génère à partir du fichier WSDL des
artefacts Java qui sont utilisés pour créer un client du service
web :
 Interface SEI (Service Endpoint Interface) : représentation Java
annotée du fichier WSDL. Cette interface permet d'implémenter des
noeuds finaux JavaBeans ou de créer des instances de client Dynamic
Proxy
 Classe Interface : définir les opération et les paramètres des opérations
 Classe factory : définir les formats des requêtes et des réponses
 Beans de données : requis pour la modélisation des données de service
web
Les artefacts wsimport
 Lors de l’exécution de la commande :
wsimport -s [Link]

 On obtient les interfaces et classes (artefacts) java


suivantes :
 [Link]
 MyWebService_Service.java
 [Link]
 [Link]
 [Link]
 [Link]
Codage du client
 Utiliser la classe généré [Link].
MyWebService _Service qui représente le service au niveau de
l’URI du fichier wsdl déployé.

import [Link];
import [Link];
public class ServiceClient { @WebServiceRef(wsdlLocation =
"META-INF/wsdl/localhost/mywebservice/[Link]")
private static MyWebService_Service service;
Codage du client
 Retrouver le proxy du service, appelé également port, en
invoquant la méthode getMyWebServicePort du service:

MyWebService port = [Link]();

 Le port implémente le SEI (Service Endpoint Interface)


défini par le service

 Invoquer le port myMethod :

return [Link](arg0);
Dynamic Proxy Client : CaclulatorWS

CalculatorWS

WSDL
Dynamic Proxy Client : CaclulatorWS
Exemple (TP) : projet client CalculatorWS

Business
Interface

Factory class
Les annotations JAX-WS
Annotations JAX-WS
 JAX-WS repose sur l’utilisation massive d’annotations pour la
configuration d’un Service Web

 Les annotations utilisées par JAX-WS sont définies dans des


JSRs séparées :

 JSR 224 : JAX-WS


 JSR 181 : Web Services Metadata
 JSR 222 : JAXB
 JSR 250 : Common Annotations
Les annotations de JSR 2241
• JAX-WS Annotations (JSR 224 )
• @ Action
• @ BindingType
• @ FaultAction
• @ ServiceMode
• @RequestWrapper
• @ResponseWrapper
• @WebEndpoint
• @WebFault
• @WebServiceClient
• @WebServiceRef

1[Link]
Les annotations des JSR 222 et 2501
 JAXB annotations (JSR-222)
 @ XmlAccessorType
 @ XmlElement
 @ XmlRootElement
 @ XmlSeeAlso
 @ XmlType
 Common annotations (JSR-250)
 @ Resource
 @ PostConstruct
 @ PreDestroy

1[Link]
Les annotations du JSR 1811
• Web Services Metadata Annotations (JSR 181)
@WebService : Implémentation d’un Service Web
 @WebMethod : Paramétrer une opération
 @WebParam : Paramétrer un message
 @WebResult : Paramétrer un message de sortie
 @WebFault : Paramétrer un message fault
• @ HandlerChain
• @ SOAPBinding
→ A noter que seule l’utilisation de l’annotation @WebService
est nécessaire (utilisation de valeurs par défaut)

1[Link]
@WebParam
 Décrit la relation entre un paramètre d’entrée d’une
méthode et un message part d’une opération
 Attributs de l’annotation :
 boolean header : précise si le paramètre doit être transmis
dans l’en-tête du message (true ) ou dans le corps (false)
 [Link] mode : précise le type d’accès au paramètre
(IN, OUT ou INOUT)
 String name : nom du paramètre
 String partName : le nom du wsdl:part représentant ce
paramètre
 String targetNamespace : l’espace de nommage de ce
paramètre
@WebResult
 Décrit la relation entre le paramètre de sortie d’une
méthode et un message part d’une opération
 Attributs de l’annotation :
 boolean header : précise si le paramètre de sortie doit être
transmis dans l’en-tête du message (true) ou dans le corps
(false)
 String name : nom du paramètre de sortie
 String partName : le nom du wsdl:part représentant ce
paramètre de sortie
 String targetNamespace : l’espace de nommage de ce
paramètre de sortie
Bibliographie
 Antonio Goncalves. Beginning Java EE 6 with
GlassFish 3. Edition Apress, 2010.

 Frédéric Chuong, Olivier Corgeron, Cyril Joui,


Jean-Baptiste Renaux et Maxime Vialette. EJB 3,
du concept à l’écriture du code. Guide du
Développeur. Edition Dunod, 2010.

 Carol McDonald. Metro, JAX-WS, WSIT, et


REST. Sun’s MicroSystems Tutorial, 2009.
Netographie (2015)
 IBM Knowledge Center :
[Link]

 Oracle Java documentation, Docs Oracle


[Link]

 JAX-WS avec Netbeans

[Link]
Annexe
L’outil wsgen
 L’outil wsgen génère des artifacts (JAXB, WSDL) à
partir de classes Java annotées via JAX-WS

 L’utilisation de cet outil n’est pas obligatoire puisque cette


génération est implicite lors de l’exécution

 Exemples d’utilisation
 Générer les classes java annotées JAXB (marshall, unmarshall)
wsgen nom_service -keep
 Générer le WSDL
wsgen nom_service –keep –wsdl

Vous aimerez peut-être aussi