Web services en Java (services Web) JMF (Tous droits réservés) 1
Web services (services web) : qu'est ce? Une architecture orientée objet et distribuée où les messages sont en syntaxe XML 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 JMF (Tous droits réservés) 2
Une architecture fournisseur de services 1. publication d'une annonce annuaire 2. recherche d'un service 3. mise en correspondance client JMF (Tous droits réservés) 3
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. JMF (Tous droits réservés) 4
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 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. JMF (Tous droits réservés) 5
Un environnement pour des WS : Axis Page d'accueil : http://axis.apache.org/axis/ Axis est un environnement de développement et d'exécution pour WS (classes pour faire des services et clients WS) mais aussi une application Web Voir tutorial d'axis à http://axis.apache.org/axis/java/user-guide.html JMF (Tous droits réservés) 6
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 JMF (Tous droits réservés) 7
Le serveur WS Reponse.jws Il est placé dans l'application web Axis 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! (si pb voir le port 7777!) 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) JMF (Tous droits réservés) 8
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); JMF (Tous droits réservés) 9
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); JMF (Tous droits réservés) 10
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 JMF (Tous droits réservés) 11
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 JMF (Tous droits réservés) 12
Utilisation de TCPMonitor Le client est programmé par : (1/4) 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 : JMF (Tous droits réservés) 13
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 JMF (Tous droits réservés) 14
Utilisation de TCPMonitor (3/4) Dans le nouvel onglet obtenu, cocher XML Format (et Switch Layout) Puis lancer le client Les messages véhiculés entre client et serveur sont affichés JMF (Tous droits réservés) 15
Utilisation de TCPMonitor (4/4) JMF (Tous droits réservés) 16
Bibliographie Web services http://fr.wikipedia.org/wiki/service_oriented_arch itecture http://docs.oracle.com/javaee/7/tutorial/doc/partw ebsvcs.htm#bnayk : la partie du Java EE 7 tutorial consacrée aux services web http://www.w3.org/2002/ws/desc/ : page d'accueil du "Web Services Description Working Group" http://axis.apache.org/axis/ : implémentation open source Axis pour construire des services web JMF (Tous droits réservés) 17
Bibliographie Java EE La littérature est énorme mais les bibles se trouvent à : Site originel http://www.oracle.com/technetwork/java/javaee/over view/index.html Tutorial à http://docs.oracle.com/javaee/7/tutorial/doc/ JMF (Tous droits réservés) 18
Conclusion de cette présentation Dans cette présentation, on a abordé : RMI : invocation de méthodes distantes Servlet et Java Server Pages (JSP) adaptés à la construction de site web dynamiques Web services en Java On aurait pu aborder JMS : service de messagerie JNDI : service de nommage JDBC : connection avec les bases de données EJB : définit la façon dont les composants doivent être écrit et le contrat qu ils doivent respecter avec le serveur d application JMF (Tous droits réservés) 19
Fin JMF (Tous droits réservés) 20