Web services en Java (services Web) Jean

publicité
Web services en Java
(services Web)
Jean-marc Farinone
Web services (services
web) : qu'est ce ?
❚ Une architecture orientée objet et distribuée où les
messages sont en syntaxe XML.
❚ Une définition : Les Services Web sont des fonctions
accessibles par le protocole HTTP. La syntaxe
utilisée est XML (SOAP)
❚ Ce n'est pas une technologie Java mais spécifiée
par le W3C (http://www.w3.org/2002/ws/)
❚ Mais Java EE propose une API pour faire des web
services
(http://java.sun.com/webservices/).
2
Un service Web
❚ Un service web est identifié par une description
(son "contrat") en XML. Plus précisément en WSDL
❚ Ce contrat représente la structure SOAP/XML du
service Web.
❚ Il est nécessaire de faire référence à ce contrat
WSDL du service Web si on désire l’utiliser (le
consommer) .
❚ Ce contrat WSDL est visible en ajoutant "?WSDL" à
la fin de l'url où se trouve le service Web.
3
Les architectures
distribuées
annuaire
n
o
i
t
a
ce
ic
l
n
b
o
u
n
p
n
.
a
1
e
n
d'u
2. recherche d'un service
fournisseur 3. mise en correspondance
client
de services
4
Les termes utilisés
❚ Fournisseur de service publie une annonce décrivant
les services qu'il fournit = un "provider"
❚ annuaire = un "registry"
❚ un client demandeur (acheteur) d'un service = un
"requester"
❚ une mise en relation entre client et fournisseur de
service = un "binding"
5
Une architecture
standardisée
❚ C'est une architecture orientée services
❚ = SOA = Service Oriented Architecture
❚ = un ensemble de protocoles et de composants
logiciels pour utiliser une architecture orientée
services
❚ Qui définit donc : le format des messages, les
spécifications pour définir un client, un fournisseur
de services, l'accès au service d'annuaire, la
communication entre client et fournisseur de
services, etc.
6
Services web
(= web services)
❚ WSDL = Web Services Description Language = format
XML pour décrire un service web
❚ SOAP = Simple Object Access Protocol = protocole
d'envoi de messages formatés en XML entre clients et
serveur web services
❚ La couche transport utilisé est soit HTTP (d'où le nom de
web services) soit SMTP (i.e. le mail)
❚ échange de messages synchrones (en attente de
réponse) ou asynchrone (publication, lecture de réponse
plus tard)
❚ UDDI = Universal Description Discovery and Integration
= annuaire de services pour utiliser les services Web.
7
Un environnement pour
des WS : Axis
❚ Page d'accueil : http://ws.apache.org/axis/
❚ Axis est un environnement de développement pour
WS (classes pour faire des services et clients WS) et
d'exécution mais aussi une application Web.
❚ On peut le télécharger à partir de l'URL ci dessus.
Choisir la version axis 1.4 et la version .zip. Après
extraction mettre l'application web (qui se trouve
dans webapps de l'archive) sous tomcat.
❚ Voir tutorial d'axis à
http://ws.apache.org/axis/java/user-guide.html
8
Développement d'un client
et serveur WS
❚ Le serveur sera encapsulé dans l'appli web Axis.
❚ Le client est un programme Java
❚ Un serveur complet : Reponse.jws
public class Reponse {
public String reponds(String st) {
return "bonjour " + st;
}
public String disCoucou() {
return "Coucou ";
}
}
❚ Ben oui c'est une classe Java. Le fichier doit avoir
pour extension .jws
9
Le serveur WS Reponse.jws
❚ Il est placé dans l'application web Axis (sous la racine de cette
application web)
❚ Qui, a la première utilisation, va compiler ce fichier Java, exécuter la
méthode appelée et retourner le résultat (si tout se passe bien !)
❚ Une manière d'accéder à ce Web Service et, dans un client web, de
demander la page d'URL :
http://localhost:8080/axis/Reponse.jws
❚ Une démonstration SVP. OK ! Attention, chrome n'affiche pas le
XML. Utiliser IE par exemple.
❚ Pourquoi cela fonctionne ?
❚ Réponse : en fait tout ce qui se termine par .jws est traité par la
servlet AxisServlet (voir le web.xml de l'application web Axis)
10
Le client WS HelloClient.java
package hello;
import
import
import
import
import
org.apache.axis.client.Call;
org.apache.axis.client.Service;
org.apache.axis.encoding.XMLType;
org.apache.axis.utils.Options;
javax.xml.rpc.ParameterMode;
public class HelloClient
{
public static void main(String [] args) throws Exception {
Options options = new Options(args);
String endpoint = "http://localhost:" + options.getPort() +
"/axis/Reponse.jws";
args = options.getRemainingArgs();
if (args == null || args.length != 1) {
System.err.println("Usage: java HelloClient [nom]");
return;
}
String nom = args[0];
Service service = new Service();
Call
call
= (Call) service.createCall();
call.setTargetEndpointAddress( new java.net.URL(endpoint) );
call.setOperationName( "reponds" );
call.addParameter( "st", XMLType.XSD_STRING, ParameterMode.IN );
call.setReturnType( XMLType.XSD_STRING );
String ret = (String) call.invoke( new Object [] { nom });
System.out.println("resultat retourné
}
}
: \n" + ret);
11
Le client WS HelloClient2.java
package hello;
import
import
import
import
import
org.apache.axis.client.Call;
org.apache.axis.client.Service;
org.apache.axis.encoding.XMLType;
org.apache.axis.utils.Options;
javax.xml.rpc.ParameterMode;
public class HelloClient2 {
public static void main(String [] args) throws Exception {
Options options = new Options(args);
String endpoint = "http://localhost:" + options.getPort() + "/axis/Reponse.jws";
args = options.getRemainingArgs();
Service
Call
service2 = new Service();
call2
= (Call) service2.createCall();
call2.setTargetEndpointAddress( new java.net.URL(endpoint) );
call2.setOperationName( "disCoucou" );
call2.setReturnType( XMLType.XSD_STRING );
String ret2 = (String) call2.invoke(new Object [] { } );
System.out.println("resultat retourné
: \n" + ret2);
}
}
12
Et XML (SOAP) dans tout
çà ?
❚ Nous n'avons fait que (!) de la programmation Java.
❚ Quid de SOAP ?
❚ En fait les messages échangés entre le client et le
serveur WS sont en SOAP.
❚ Si, si.
13
TCPMonitor : tcpmon
❚ Axis propose un outil qui permet de voir les
messages TCP échangés entre un client et un
serveur : TCPMonitor
❚ Il suffit d'indiquer que le client envoit les messages
à ... TCPMonitor, que TCPMonitor envoit les
messages au serveur, et tout échange entre client et
serveur est tracé dans cet outil.
❚ On lance cet outil par :
java org.apache.axis.utils.tcpmon
14
Utilisation de TCPMonitor
1/4
❚ Le client est programmé par :
String endpoint = "http://localhost:7777" + "/axis/Reponse.jws";
...
Service service2 = new Service();
Call call2
= (Call) service2.createCall();
call2.setTargetEndpointAddress( new java.net.URL(endpoint) );
....
❚ Lorsque TCPMonitor est lancé on obtient le premier
écran :
15
Utilisation de TCPMonitor
2/4
❚ Indiqué le port écouté dans le champ de texte qui
suit dans Listen Port #. Ici 7777.
❚ Et cliquer le bouton Add
16
Utilisation de TCPMonitor
3/4
❚ Dans le nouvel onglet obtenu, cocher XML Format
(et Switch Layout).
❚ Puis (compiler et) lancer le client.
❚ Les messages véhiculés entre client et serveur sont
affichés.
17
Utilisation de TCPMonitor
4/4
18
Bibliographie Web services
❚ http://fr.wikipedia.org/wiki/Service_Oriented_
Architecture
❚ http://java.sun.com/javaee/5/docs/tutorial/doc
/bnayk.html : la partie du Java EE 5 tutorial consacrée aux
services web (utilisant JAX-WS et les annotations)
❚ http://www.w3.org/2002/ws/desc/ : page d'accueil du
"Web Services Description Working Group"
❚ http://ws.apache.org/axis/ : implémentation open
source Axis pour construire des services web
❚ http://www.xmethods.com/ : site de web services
19
Fin
20
Téléchargement