Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
Publié parAnette Bertrand Modifié depuis plus de 10 années
1
1 Les technologies XML Cours 3 : Les Web Services – Implémentation – JAX-WS Février 2011 - Version 1.0 -
2
2 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 dun 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.
3
3 Web Services La version intégré à JEE 5 est JAX-WS 2.0 Limplé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 dapplication OpenSource de Sun.
4
4 WebServices – Encodage des messages Messages de type RPC Messages XML destinés à représenter, indépendamment du langage de programmation, linvocation dun service, ainsi que son résultat éventuel. La structure générale de la requête et de la réponse est imposée par la spécification. Cette dernière aborde aussi les problèmes dencodage des paramètres, notamment des tableaux et des graphes dobjets : RPC / encoded. Ce modèle de messages est le plus simple des deux, mais aussi le plus contraignant.
5
5 WebServices – Encodage des messages Messages de type Document La spécification SOAP nimpose, dans ce cas, aucune contrainte sur la structure de ces messages. Le sens des données XML véhiculées est laissé à lappréciation des applications participant à léchange. Ce modèle de messages offre plus de liberté, mais peut être à lorigine de problèmes dinteropérabilité.
6
6 WebServices – Encodage des messages 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é de respecter certaines règles. Dans le 2ème cas, il peut décrire nimporte quelle structure XML. 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 ; 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 lutilisation des messages de type Document. Gare donc aux problèmes dinteropérabilité entre les anciennes applications qui sappuient sur le modèle RPC et certains nouveaux outils qui ne supportent que le modèle Document. Pour invoquer un Web Service, les plates-formes sappuient donc aujourdhui sur le 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é ? 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. Notamment le fait que la balise racine du message XML transporté corresponde au nom de lopération invoquée.
7
7 Web Services Description des annotations JSR 181 (WS MetaData) Annotation @WebService Marque une classe comme WS @WebMethod Expose une méthode comme une opération SOAP @Oneway Marque une action comme sans retour. Ne sapplique quà une méthode sans paramètre de sortie @SOAPBinding Permet de spécifier lencodage du message (RPC ou Document)
8
8 Web Services Description des annotations JSR 181 (WS MetaData) Annotation @WebParam Permet de spécifier le mapping entre un paramètre de la méthode java et un élément du message XML @WebResult Permet de spécifier le mapping entre la valeur de retour de la méthode java et un élément du message XML @HandlerChain Permet de préciser un fichier de configuration pour la factorisation des gestionnaires
9
9 Web Services Description des annotations JSR 224 (JAX-WS 2.0) Annotation @BindingType Précise le type de bind du service (protocole) @RequestWrapper Permet à JAXB de mapper les éléments XML de la requête avec les éléments java associés @ResponseWrapper Permet à JAXB de mapper les éléments XML de la réponse avec les éléments java associés @ServiceMode Permet laccès au message complet ou au payload @WebFault Permet de gérer le mapping entre une exception Java et une Fault SOAP
10
10 Web Services - Serveurs Interface @WebService(name="Convertisseur", serviceName="ConvertisseurService", targetNamespace="peut.etre.different") ….}ImplementationWebService(endpointInterface="fr.lgr.exemple.ws.Convertisseur") public class ConvertisseurImpl implements Convertisseur { ….@WebMethod public double getEuro(double franc) throws ConvertisseurException { ….}…}Exception @WebFault public class ConvertisseurException extends RemoteException { …}
11
11 Web Services - Client Les classes clientes sont générées à laide dun outil. Exemple : @WebServiceClient(name = "ConvertisseurImplService", targetNamespace = "http://impl.ws.exemple.lgr.fr/", wsdlLocation = "http://localhost:9080/convertisseur- web/mesWebServices/Convertisseur?wsdl") public class ConvertisseurImplService extends Service extends Service{..}
12
12 Web Services - Client @WebService(name = "Convertisseur", targetNamespace = "peut.etre.different") @XmlSeeAlso({ ObjectFactory.class ObjectFactory.class}) public interface Convertisseur { /** /** * * @param arg0 * @param arg0 * @return * @return * returns double * returns double */ */ @WebMethod @WebMethod @WebResult(targetNamespace = "") @WebResult(targetNamespace = "") @RequestWrapper(localName = "getEuro", targetNamespace = "peut.etre.different", className = "fr.lgr.exemple.ws.client.generated.GetEuro") @RequestWrapper(localName = "getEuro", targetNamespace = "peut.etre.different", className = "fr.lgr.exemple.ws.client.generated.GetEuro") @ResponseWrapper(localName = "getEuroResponse", targetNamespace = "peut.etre.different", className = "fr.lgr.exemple.ws.client.generated.GetEuroResponse") @ResponseWrapper(localName = "getEuroResponse", targetNamespace = "peut.etre.different", className = "fr.lgr.exemple.ws.client.generated.GetEuroResponse") public double getEuro( public double getEuro( @WebParam(name = "arg0", targetNamespace = "") @WebParam(name = "arg0", targetNamespace = "") double arg0); double arg0);
13
13 Web Services Référence https://jax-ws.dev.java.net/ https://glassfish.dev.java.net/ https://metro.dev.java.net/
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.