chapitre 5 web services : le nouveau standard jax-ws 2.0
DESCRIPTION
Chapitre 5 Web Services : Le nouveau standard JAX-WS 2.0. Sommaire. Revue des standards des Web services Le protocole SOAP Le langage WSDL Le service d’annuaires UDDI Développement classique avec Apache Axis Développement avec JAX-WS 2.0. Définition de l’architecture SOA. - PowerPoint PPT PresentationTRANSCRIPT
Chapitre 5
Web Services : Le nouveau standard JAX-WS 2.0
Développement de Web services
2M.Romdhani, INSAT, Octobre 2009
Sommaire
Revue des standards des Web services Le protocole SOAP Le langage WSDL Le service d’annuaires UDDI
Développement classique avec Apache Axis
Développement avec JAX-WS 2.0
Développement de Web services
3M.Romdhani, INSAT, Octobre 2009
Définition de l’architecture SOA « Il s’agit d’un modèle pour organiser et
architecturer les services offerts par un organisme » (Définition de l’OASIS)
Batch
On-linemidrange
Client/server
Web client
Service-oriented
architectures
1970s 1980s 1990s 2000s 2010s
Développement de Web services
4M.Romdhani, INSAT, Octobre 2009
Schema
Agreements
ProgrammingLanguage
Object Model
ApplicationServer
Database
OperatingSystem
Database
OperatingSystem
ProgrammingLanguage
Object Model
ApplicationServer
Vous L’autre
Solution à fort couplage Architecture orientée Services
SOA : Intégration on interopérabilité ?
Développement de Web services
5M.Romdhani, INSAT, Octobre 2009
L'architecture orientée service
« Service-oriented architectures are an approach to designing distributed computing systems that considers software resources as services available on a network. »
Les 4 principes fondamentaux de SOA [Définition de microsoft « Don Box »] :
1. Frontière explicite
2. Services Autonomes
3. Les services partagent les schémas, les contrats mais pas les classes
4. La compatibilité des services est négociée sur la base de stratégies
Développement de Web services
6M.Romdhani, INSAT, Octobre 2009
Contracts
Services
Service
State
Logic
Message2Message1
Développement de Web services
7M.Romdhani, INSAT, Octobre 2009
L‘idée principale de la SOA
Messages Flux de données non encapsulées Pas de suppositions sur l‘implémentation
Contrats: Frontières explicites Les types de données et les sémantiques y sont explicités Les types de données doivent permettre l‘évolution Les paramètres techniques de sécurité, de transactions pour les
Services sont négociables dynamiquement
Processus autonomes. « Building Blocks », et non pas des Silos.
Développement de Web services
8M.Romdhani, INSAT, Octobre 2009
Revue des standards des Web services
Développement de Web services
9M.Romdhani, INSAT, Octobre 2009
Qu’est ce qu’un Web Service ?
Les Web Services sont des services offerts via le web
Un service Web est un ensemble de protocoles et de normes utilisés pour échanger des données entre les applications
Web Service = HTTP + XML
Les prolifération des Services Web correspond à un nouveau standard d’architectures applicatives qui est le SOA (Service Oriented Architecture)
Un exemple : un client demande le prix d’un article en envoyant un message sur le web. Ce message contient la référence de l’article. Le Web Service va recevoir la référence, effectuer le traitement du service et renvoyer le prix au client via un autre message.
Développement de Web services
10M.Romdhani, INSAT, Octobre 2009
Standards des Web services
Les Standards décrivent :
Qu’est ce qui circule “sur le fil” ? Formats et protocoles (SOAP)
Qu’est ce qui décrit ce qui circule “sur le fil” ? Langage de Description (WSDL)
Qu’est ce qui nous permet de trouver ces descriptions ?
Référentiel (UDDI)
Développement de Web services
11M.Romdhani, INSAT, Octobre 2009
SOAP (Simple Object Access Protocol)
Standard W3C (Initiative IBM et Microsoft) C’est un protocole de RPC pour l’invocation des méthodes
d'objets distants Basé entièrement sur XML
C’est une spécification non propriétaire
Prend en charge : divers protocoles de transport (HTTP, SMTP,…) différents formats (MIME,…)
Développement de Web services
12M.Romdhani, INSAT, Octobre 2009
Structure d’un message SOAP
Message SOAP
=
Enveloppe ( Header + Body )
SAOP Header(Optional)
SAOP Body
Développement de Web services
13M.Romdhani, INSAT, Octobre 2009
WSDL (Web Services Description Language)
Standard W3C
Langage de description des services Web
Basé entièrement sur XML (Schéma XML)
Définition de l’interface, de l’URL et du port du Web Service
Développement de Web services
14M.Romdhani, INSAT, Octobre 2009
Contrat WSDL
Constitué par :
Un composant d’interface :- Format de transmission des messages- Protocole du Service Web- Opérations de transmission des messages
Un composant d’implémentation : le point d’accès (URL) du Service Web
Développement de Web services
15M.Romdhani, INSAT, Octobre 2009
UDDI (Universal Description Discovery and Integration)
Les Services Web n’ont un sens que si des utilisateurs potentiels peuvent les localiser
C’est une technologie d'annuaire
Recommandation OASIS (Consortium travaillant sur la standardisation des technologies Web Services)
Référentiel défini lui-même en WSDL
Référentiel Public / Privé
Développement de Web services
16M.Romdhani, INSAT, Octobre 2009
UDDI : comment ça marche ?
Développement de Web services
17M.Romdhani, INSAT, Octobre 2009
Composition du répertoire UDDI
Chaque entrée du répertoire UDDI est constituée de trois parties :
1. Les "pages blanches" décrivent l'entreprise qui offre le service (nom, adresse, contacts,…)
2. Les "pages jaunes" comportent les catégories industrielles
3. Les "pages vertes" : contiennent une description technique de l’interface
Développement de Web services
18M.Romdhani, INSAT, Octobre 2009
Récapitulatif SOAP, WSDL, et UDDI
SOAP
WSDL
UDDI
SOAP 1.2
Ent
ière
men
t ba
sés
sur
XM
L
Standard W3C
IBM, MICROSOFT ARIBA COMPAQ HP…
IBM MICROSOFTARIBA
ARIBARecommandation OASIS
Standard W3C WSDL 2.0
UDDI 3.0
C’est un protocole de RPC pour l’invocation des méthodes d'objets distants
C’est le langage de description des services Web
C’est une technologie d'annuaire
Développement de Web services
19M.Romdhani, INSAT, Octobre 2009
Scénario de déroulement
AnnuaireUDDI
AnnuaireUDDI
ClientClientService
Web
ServiceWeb
Enregistrement du service
Recherche d’un service
InterfaceWSDL
Récupération de l’interface du service
Utilisation du service
SOAP
SOAP
HTTP
SOAP
1
2
3
4proxy
Développement de Web services
20M.Romdhani, INSAT, Octobre 2009
Le protocole SOAP
Développement de Web services
21M.Romdhani, INSAT, Octobre 2009
Exemple de message SOAP
POST /StockQuote HTTP/1.1
Host: www.stockquoteserver.com
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn
SOAPAction: "Some-URI"
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<m:GetLastTradePrice xmlns:m="Some-URI">
<symbol>DIS</symbol>
</m:GetLastTradePrice>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Propre au portage sur HTTP
Développement de Web services
22M.Romdhani, INSAT, Octobre 2009
Exemple de message de réponse
HTTP/1.1 200 OK
Content-Type: text/xml; charset="utf-8"
Content-Length: nnnn
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
<SOAP-ENV:Body>
<m:GetLastTradePriceResponse xmlns:m="Some-URI">
<Price>34.5</Price>
</m:GetLastTradePriceResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Propre au portage sur HTTP
Développement de Web services
23M.Romdhani, INSAT, Octobre 2009
Analyse de l’exemple
Des Balises Utilisateur
GetLastTradePriceResponse
Symbol
Price
Un Namespace Utilisateur
xmlns:m="Some-URI"
Des Balises SOAP
Enveloppe
Body
Un Namespace SOAP
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
Des informations dans la partie HTTP
Développement de Web services
24M.Romdhani, INSAT, Octobre 2009
SOAP Header
Mécanisme d’extension du protocol SOAP
La balise Header est optionnelle
Si la balise Header est présente, elle doit être le premier fils de la balise Envelope
La balise Header contient des entrées
Une entrée est n’importe quelle balise incluse dans un namespace
Exemple de SOAP HEADER<SOAP-ENV:Header>
<t:Transaction xmlns:t="some-URI">5
</t:Transaction>
</SOAP-ENV:Header>
Développement de Web services
25M.Romdhani, INSAT, Octobre 2009
SOAP Body
Le Body contient le message à échanger
La balise Body est obligatoire
La balise Body doit être le premier fils de la balise Envelope (ou le deuxième si il existe une balise Header)
La balise Body contient des entrées
Une entrée est n’importe quelle balise incluse optionnellement dans un namespace
Une entrée peut être une Fault.
Développement de Web services
26M.Romdhani, INSAT, Octobre 2009
Encodage
Un message SOAP contient des données typées. Il faut donc définir un moyen d’encoder ces données.
Vocabulaire SOAP :
Value (valeur d’une donnée) Simple value (string, integers,etc)
Compound value (array, struct, …)
Type (d’une value) Simple Type
Compound Type
Développement de Web services
27M.Romdhani, INSAT, Octobre 2009
SOAP avec HTTP
SOAP peut être facilement porté sur Http Convient au mode Request/Response de Http Le message SOAP est mis dans une requête POST avec un content-
type text/xml Définition d’un header http : SOAPAction Utilisation des codes http (2xx, 4xx, 5xx)
Développement de Web services
28M.Romdhani, INSAT, Octobre 2009
Le langage WSDL
Développement de Web services
29M.Romdhani, INSAT, Octobre 2009
Présentation
Une description WSDL :
1. Décrit le type d’un service web (méthodes, types des paramètres)Cette description peut être comparée à la description IDL CORBA, elle peut servir à générer automatiquement des amorces.
2. Décrit les aspects techniques d’implantation d’un service web (quel est le protocole utilisé, quel est le l’adresse du service)Cette description sert à se connecter concrètement à un service web.
Développement de Web services
30M.Romdhani, INSAT, Octobre 2009
Balises
Une description WSDL est un document XML qui commence par la balise definition et contient les balises suivantes :
types: cette balise décrit les types utilisés message: cette balise décrit la structure d’un message échangé portType: cette balise décrit un ensemble d’opérations (interface d’un
service web) operation: cette balise décrit une opération réalisée par le service web. Une opération
reçoit des messages et envois des messages.
binding: cette balise décrit le lien entre un protocole (http) et un portType.
service: cette balise décrit un service comme un ensemble de ports. port: cette balise décrit un port au travers duquel il est possible d’accéder à un
ensemble d’opérations. Un port référence un Binding
Développement de Web services
31M.Romdhani, INSAT, Octobre 2009
Développer des Web services
avec Apache Axis
Développement de Web services
32M.Romdhani, INSAT, Octobre 2009
Architecture (Serveur)
Axis fournit une Servlet (AxisServlet) qui reçoit des message SOAP sur http et qui transforme l’appel en un appel de méthode classique Java
Développer un Web Service revient alors à développer un objet Java et à enregistrer ses méthodes auprès de la Servlet AxisServlet.
Les clients envoient alors leurs messages SOAP sur http à AxisServlet.
Pour SMTP les clients envoient leurs messages par mail à un démon. Le démon reçoit ces messages et les renvoie sur http à AxisServlet.
Développement de Web services
33M.Romdhani, INSAT, Octobre 2009
Architecture (Serveur)
JVM
Moteur de Servlet
AxisServlet
La Servlet AxisServlet reçoit et renvoie les messages SOAP et transmet aux objets Java correspondant Les Objets Java effectuent
les services. Ils sont des objets Java classiques.
Objets Java et Servlet sont dans la même JVM (pas de répartition).
SOAP/HTTP
Le client envoie des messages SOAP/HTTP
Développement de Web services
34M.Romdhani, INSAT, Octobre 2009
Développement d’un Web Service
Développer une classe Java
public class MyFirstWebService {
public final String BOOK1 = "La méthode";
public final String BOOK2 = "Le Macroscope";
public int getPrice(String bookTitle) {
if (bookTitle.compareTo(BOOK1)==0) {
return 15;
}
else if (bookTitle.compareTo(BOOK2)==0) {
return 20;
}
else return 300;
}
}
Développement de Web services
35M.Romdhani, INSAT, Octobre 2009
Déploiement un Web Service
Elaborer un descripteur SOAP de votre classe
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="MyFirstWebService" provider="java:RPC">
<parameter name="className" value="MyFirstWebService"/>
<parameter name="allowedMethods" value="*"/>
</service>
</deployment>
Exporter le descripteur
java org.apache.axis.client.AdminClient deploy.wsdd
Développement de Web services
36M.Romdhani, INSAT, Octobre 2009
Déploiement un Web Service
Le fichier jws sont les équivalents des jsp pour les Web Service.
Construction d’un fichier jws à partir d’une classe java: Copy MyFirstWebService.java /…/MyFirstWebService.jws
Développement de Web services
37M.Romdhani, INSAT, Octobre 2009
Le Client à partir du WSDL
Génération d’un ensemble de classes facilitant l’envoi de message SOAP:
java org.apache.axis.wsdl.WSDL2Java file.wsdl
Classes générées:
Pour les Type
Pour les PortType
Pour les Binding
Pour les Port
Pour les Service
Développement de Web services
38M.Romdhani, INSAT, Octobre 2009
Obtention du WSDL de l’exemple
Sous axis, dans un navigateur, mettre l’adresse du Web Service suivie de ?WSDL
http://localhost:8080/axis/jwspages/MyFirstWebService.jws?WSDL
Développement de Web services
39M.Romdhani, INSAT, Octobre 2009
Développement avec JAX-WS 2.0
Développement de Web services
40M.Romdhani, INSAT, Octobre 2009
Java API 4 XML-based Web Services
Successeur de JAX-RPC.
Actuellement en version 2.0
Permet de créer des services Web dans le conteneur Web dans le conteneur EJB
Supporte les injections de dépendances
Développement de Web services
41M.Romdhani, INSAT, Octobre 2009
Exemple de Service
@javax.ejb.Stateless () // à supprimer si le service est créé dans un [email protected] ()public class SubjectInfo {
@javax.jws.WebMethodpublic String getSubjectInfo (String subjectID) {
...}@javax.jws.WebMethodpublic String [] getAllSubjects () {
...}
}
// Référencement du service à partir d'un client@WebServiceRef (wsdlLocation="http://xxx:8080/SubjectInfoService/SubjectInfo?wsdl")static SubjectInfoService service;
// Recherche du "port"SubjectInfo subjectInfo = service.getSubjectInfoPort ();System.out.println(subjectInfo.getSubjectInfo ("S07"));
Développement de Web services
42M.Romdhani, INSAT, Octobre 2009
Scénario de génération d'artéfacts
Créer le service et le compiler
Utiliser wsgen pour générer les artifacts
Assembler dans un WAR/JAR et le déployer
Utiliser wsimport pour générer les artifacts
Coder le client
Exécuter le client