Web services en Java
(services Web)
Jean-marc Farinone
2
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/).
3
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.
4
Les architectures
distribuées
fournisseur
de services
client
annuaire
1. publication
d'une annonce
3. mise en correspondance
2. recherche d'un service
5
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"
6
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.
7
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.
8
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
9
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
❚ Ben oui c'est une classe Java. Le fichier doit avoir
pour extension .jws
public class Reponse {
public String reponds(String st) {
return "bonjour " + st;
}
public String disCoucou() {
return "Coucou ";
}
}
10
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)
11
Le client WS HelloClient.java
package hello;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.utils.Options;
import 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);
}
}
12
Le client WS HelloClient2.java
package hello;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
import org.apache.axis.utils.Options;
import 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 service2 = new Service();
Call 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);
}
}
13
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.
14
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
15
Utilisation de TCPMonitor
1/4
❚ Le client est programmé par :
❚ Lorsque TCPMonitor est lancé on obtient le premier
écran :
String endpoint = "http://localhost:7777" + "/axis/Reponse.jws";
...
Service service2 = new Service();
Call call2 = (Call) service2.createCall();
call2.setTargetEndpointAddress( new java.net.URL(endpoint) );
....
16
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
17
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.
18
Utilisation de TCPMonitor
4/4
19
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
20
Fin

WebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

  • 1.
    Web services enJava (services Web) Jean-marc Farinone
  • 2.
    2 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/).
  • 3.
    3 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.
  • 4.
    4 Les architectures distribuées fournisseur de services client annuaire 1.publication d'une annonce 3. mise en correspondance 2. recherche d'un service
  • 5.
    5 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"
  • 6.
    6 Une architecture standardisée ❚ C'estune 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.
  • 7.
    7 Services web (= webservices) ❚ 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.
  • 8.
    8 Un environnement pour desWS : 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
  • 9.
    9 Développement d'un client etserveur WS ❚ Le serveur sera encapsulé dans l'appli web Axis. ❚ Le client est un programme Java ❚ Un serveur complet : Reponse.jws ❚ Ben oui c'est une classe Java. Le fichier doit avoir pour extension .jws public class Reponse { public String reponds(String st) { return "bonjour " + st; } public String disCoucou() { return "Coucou "; } }
  • 10.
    10 Le serveur WSReponse.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)
  • 11.
    11 Le client WSHelloClient.java package hello; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; import org.apache.axis.utils.Options; import 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); } }
  • 12.
    12 Le client WSHelloClient2.java package hello; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; import org.apache.axis.utils.Options; import 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 service2 = new Service(); Call 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); } }
  • 13.
    13 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.
  • 14.
    14 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
  • 15.
    15 Utilisation de TCPMonitor 1/4 ❚Le client est programmé par : ❚ Lorsque TCPMonitor est lancé on obtient le premier écran : String endpoint = "http://localhost:7777" + "/axis/Reponse.jws"; ... Service service2 = new Service(); Call call2 = (Call) service2.createCall(); call2.setTargetEndpointAddress( new java.net.URL(endpoint) ); ....
  • 16.
    16 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
  • 17.
    17 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.
  • 18.
  • 19.
    19 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
  • 20.