13
1 Les technologies XML Les technologies XML Cours 3 : Cours 3 : Les Web Services – Les Web Services – Implémentation – JAX-WS Implémentation – JAX-WS Février 2011 Février 2011 - Version 1.0 - - Version 1.0 -

1 Les technologies XML Cours 3 : Les Web Services – Implémentation – JAX-WS Février 2011 - Version 1.0 -

Embed Size (px)

Citation preview

Page 1: 1 Les technologies XML Cours 3 : Les Web Services – Implémentation – JAX-WS Février 2011 - Version 1.0 -

1

Les technologies XMLLes technologies XML

Cours 3 : Cours 3 : Les Web Services – Les Web Services – Implémentation – JAX-WSImplémentation – JAX-WS

Février 2011Février 2011

- Version 1.0 - - Version 1.0 -

Page 2: 1 Les technologies XML Cours 3 : Les Web Services – Implémentation – JAX-WS Février 2011 - Version 1.0 -

2

Web Services Web Services

JAX-WS remplace JAX-RPC à partir de JEE 5.

Ce changement de nom reflète la changement de philosophie des développements Web Services en Java, passant d’un modèle « RPC » à un modèle « document »

A partir de J2SE 5, le langage intègre des annotations permettant de simplifier le développement de Web Services.

Ces annotations correspondent à la JSR 224 et à la JSR 181.

Page 3: 1 Les technologies XML Cours 3 : Les Web Services – Implémentation – JAX-WS Février 2011 - Version 1.0 -

3

Web ServicesWeb Services

La version intégré à JEE 5 est JAX-WS 2.0

L’implémentation de référence de la norme est un sous-projet OpenSource qui fait partie du projet « Metro ».

Metro lui-même est un sous projet de GlassFish le serveur d’application OpenSource de Sun.

Page 4: 1 Les technologies XML Cours 3 : Les Web Services – Implémentation – JAX-WS Février 2011 - Version 1.0 -

4

WebServices – Encodage des WebServices – Encodage des messagesmessages

Messages de type RPC Messages de type RPC

Messages XML destinés à représenter, Messages XML destinés à représenter, indépendamment du langage de indépendamment du langage de programmation, l’invocation d’un service, ainsi programmation, l’invocation d’un service, ainsi que son résultat éventuel. La structure générale que son résultat éventuel. La structure générale de la requête et de la réponse est imposée par la de la requête et de la réponse est imposée par la spécification. Cette dernière aborde aussi les spécification. Cette dernière aborde aussi les problèmes d’encodage des paramètres, problèmes d’encodage des paramètres, notamment des tableaux et des graphes notamment des tableaux et des graphes d’objets : RPC / encoded. Ce modèle de d’objets : RPC / encoded. Ce modèle de messages est le plus simple des deux, mais messages est le plus simple des deux, mais aussi le plus contraignant. aussi le plus contraignant.

Page 5: 1 Les technologies XML Cours 3 : Les Web Services – Implémentation – JAX-WS Février 2011 - Version 1.0 -

5

WebServices – Encodage des WebServices – Encodage des messagesmessages

Messages de type Document Messages de type Document

La spécification SOAP n’impose, dans ce cas, La spécification SOAP n’impose, dans ce cas, aucune contrainte sur la structure de ces aucune contrainte sur la structure de ces messages. Le sens des données XML véhiculées messages. Le sens des données XML véhiculées est laissé à l’appréciation des applications est laissé à l’appréciation des applications participant à l’échange. Ce modèle de messages participant à l’échange. Ce modèle de messages offre plus de liberté, mais peut être à l’origine de offre plus de liberté, mais peut être à l’origine de problèmes d’interopérabilité. problèmes d’interopérabilité.

Page 6: 1 Les technologies XML Cours 3 : Les Web Services – Implémentation – JAX-WS Février 2011 - Version 1.0 -

6

WebServices – Encodage des WebServices – Encodage des messagesmessages

Notez bien que dans les 2 cas, la structure des messages XML échangés est Notez bien que dans les 2 cas, la structure des messages XML échangés est complètement décrite par le document WSDL. Dans le 1er cas, le serveur est obligé complètement décrite par le document WSDL. Dans le 1er cas, le serveur est obligé de respecter certaines règles. Dans le 2ème cas, il peut décrire n’importe quelle de respecter certaines règles. Dans le 2ème cas, il peut décrire n’importe quelle structure XML. structure XML.

Le modèle de messages de type RPC est tombé en désuétude : Le modèle de messages de type RPC est tombé en désuétude :

Dans SOAP 1.2, seul le support du modèle Document est obligatoire ; Dans SOAP 1.2, seul le support du modèle Document est obligatoire ;

On constate une évolution similaire en Java avec la dernière API : JAX-WS 2.0 ; On constate une évolution similaire en Java avec la dernière API : JAX-WS 2.0 ;

Quant à .Net, il préconise depuis le début l’utilisation des messages de type Quant à .Net, il préconise depuis le début l’utilisation des messages de type Document. Document.

Gare donc aux problèmes d’interopérabilité entre les anciennes applications qui Gare donc aux problèmes d’interopérabilité entre les anciennes applications qui s’appuient sur le modèle RPC et certains nouveaux outils qui ne supportent que le s’appuient sur le modèle RPC et certains nouveaux outils qui ne supportent que le modèle Document. modèle Document.

Pour invoquer un Web Service, les plates-formes s’appuient donc aujourd’hui sur le Pour invoquer un Web Service, les plates-formes s’appuient donc aujourd’hui sur le modèle Document. Mais, comme la structure des messages XML est libre, comment modèle Document. Mais, comme la structure des messages XML est libre, comment par exemple repérer dans le document XML le nom du service invoqué ? par exemple repérer dans le document XML le nom du service invoqué ?

En fait, pour résoudre ce problème, les plates-formes utilisent généralement le En fait, pour résoudre ce problème, les plates-formes utilisent généralement le modèle Document/literal wrapped. Ce modèle impose quelques contraintes. modèle Document/literal wrapped. Ce modèle impose quelques contraintes. Notamment le fait que la balise racine du message XML transporté corresponde au Notamment le fait que la balise racine du message XML transporté corresponde au nom de l’opération invoquée. nom de l’opération invoquée.

Page 7: 1 Les technologies XML Cours 3 : Les Web Services – Implémentation – JAX-WS Février 2011 - Version 1.0 -

7

Web ServicesWeb Services

Description des annotations JSR 181 (WS MetaData)Description des annotations JSR 181 (WS MetaData)

Annotation Annotation

@WebService @WebService Marque une classe comme WSMarque une classe comme WS

@WebMethod @WebMethod Expose une méthode comme une Expose une méthode comme une opération SOAPopération SOAP

@Oneway @Oneway Marque une action comme sans Marque une action comme sans retour. Ne s’applique qu’à une retour. Ne s’applique qu’à une méthode sans paramètre de sortieméthode sans paramètre de sortie

@SOAPBinding @SOAPBinding Permet de spécifier l’encodage du Permet de spécifier l’encodage du message (RPC ou Document)message (RPC ou Document)

Page 8: 1 Les technologies XML Cours 3 : Les Web Services – Implémentation – JAX-WS Février 2011 - Version 1.0 -

8

Web ServicesWeb Services

Description des annotations JSR 181 (WS MetaData)Description des annotations JSR 181 (WS MetaData)

Annotation Annotation

@WebParam @WebParam Permet de spécifier le mapping Permet de spécifier le mapping entre un paramètre de la méthode entre un paramètre de la méthode java et un élément du message java et un élément du message XMLXML

@WebResult @WebResult Permet de spécifier le mapping Permet de spécifier le mapping entre la valeur de retour de la entre la valeur de retour de la méthode java et un élément du méthode java et un élément du message XMLmessage XML

@HandlerChain @HandlerChain Permet de préciser un fichier de Permet de préciser un fichier de configuration pour la factorisation configuration pour la factorisation des gestionnairesdes gestionnaires

Page 9: 1 Les technologies XML Cours 3 : Les Web Services – Implémentation – JAX-WS Février 2011 - Version 1.0 -

9

Web ServicesWeb Services

Description des annotations JSR 224 (JAX-WS 2.0)Description des annotations JSR 224 (JAX-WS 2.0)

Annotation Annotation

@BindingType@BindingType Précise le type de bind du service Précise le type de bind du service (protocole)(protocole)

@RequestWrapper@RequestWrapper Permet à JAXB de mapper les éléments Permet à JAXB de mapper les éléments XML de la requête avec les éléments XML de la requête avec les éléments java associésjava associés

@ResponseWrapper@ResponseWrapper Permet à JAXB de mapper les éléments Permet à JAXB de mapper les éléments XML de la réponse avec les éléments XML de la réponse avec les éléments java associésjava associés

@ServiceMode@ServiceMode Permet l’accès au message complet ou Permet l’accès au message complet ou au payloadau payload

@WebFault@WebFault Permet de gérer le mapping entre une Permet de gérer le mapping entre une exception Java et une Fault SOAPexception Java et une Fault SOAP

Page 10: 1 Les technologies XML Cours 3 : Les Web Services – Implémentation – JAX-WS Février 2011 - Version 1.0 -

10

Web Services - ServeursWeb Services - Serveurs

InterfaceInterface@WebService(name="Convertisseur", serviceName="ConvertisseurService", @WebService(name="Convertisseur", serviceName="ConvertisseurService",

targetNamespace="peut.etre.different") targetNamespace="peut.etre.different")

……..

}}

ImplementationImplementationWebService(endpointInterface="fr.lgr.exemple.ws.Convertisseur")WebService(endpointInterface="fr.lgr.exemple.ws.Convertisseur")

publicpublic classclass ConvertisseurImpl ConvertisseurImpl implementsimplements Convertisseur { Convertisseur {

……..

@WebMethod@WebMethod

publicpublic doubledouble getEuro( getEuro(doubledouble franc) franc) throwsthrows ConvertisseurException { ConvertisseurException {

……..

}}

……

}}

ExceptionException@WebFault @WebFault publicpublic classclass ConvertisseurException ConvertisseurException extendsextends RemoteException { RemoteException {

……

}}

Page 11: 1 Les technologies XML Cours 3 : Les Web Services – Implémentation – JAX-WS Février 2011 - Version 1.0 -

11

Web Services - ClientWeb Services - Client

Les classes clientes sont générées à l’aide d’un Les classes clientes sont générées à l’aide d’un outil. outil.

Exemple :Exemple :@WebServiceClient(name = "ConvertisseurImplService", targetNamespace @WebServiceClient(name = "ConvertisseurImplService", targetNamespace

= "http://impl.ws.exemple.lgr.fr/", wsdlLocation = = "http://impl.ws.exemple.lgr.fr/", wsdlLocation = "http://localhost:9080/convertisseur-web/mesWebServices/Convertisseur?"http://localhost:9080/convertisseur-web/mesWebServices/Convertisseur?wsdl")wsdl")

publicpublic classclass ConvertisseurImplService ConvertisseurImplService

extendsextends Service Service

{{

....

}}

Page 12: 1 Les technologies XML Cours 3 : Les Web Services – Implémentation – JAX-WS Février 2011 - Version 1.0 -

12

Web Services - ClientWeb Services - Client

@WebService(name = "Convertisseur", targetNamespace = "peut.etre.different")@WebService(name = "Convertisseur", targetNamespace = "peut.etre.different")

@XmlSeeAlso({@XmlSeeAlso({

ObjectFactory.ObjectFactory.classclass

})})

publicpublic interfaceinterface Convertisseur { Convertisseur {

/**/**

* *

* * @param@param arg0 arg0

* * @return@return

* returns double* returns double

*/*/

@WebMethod@WebMethod

@WebResult(targetNamespace = "")@WebResult(targetNamespace = "")

@RequestWrapper(localName = "getEuro", targetNamespace = "peut.etre.different", className = @RequestWrapper(localName = "getEuro", targetNamespace = "peut.etre.different", className = "fr.lgr.exemple.ws.client.generated.GetEuro")"fr.lgr.exemple.ws.client.generated.GetEuro")

@ResponseWrapper(localName = "getEuroResponse", targetNamespace = "peut.etre.different", className = @ResponseWrapper(localName = "getEuroResponse", targetNamespace = "peut.etre.different", className = "fr.lgr.exemple.ws.client.generated.GetEuroResponse")"fr.lgr.exemple.ws.client.generated.GetEuroResponse")

publicpublic doubledouble getEuro( getEuro(

@WebParam(name = "arg0", targetNamespace = "")@WebParam(name = "arg0", targetNamespace = "")

doubledouble arg0); arg0);

Page 13: 1 Les technologies XML Cours 3 : Les Web Services – Implémentation – JAX-WS Février 2011 - Version 1.0 -

13

Web ServicesWeb Services

RéférenceRéférence

https://jax-ws.dev.java.net/https://jax-ws.dev.java.net/

https://glassfish.dev.java.net/https://glassfish.dev.java.net/

https://metro.dev.java.net/https://metro.dev.java.net/