Web Services

Demander un devis
Je souhaite télécharger le programme ou imprimer le programme
  • Imprimer

 

Tutoriel sur les WS : 

Définition d'un Web Service :

 

Définition 1 (W3C) :

  Un service Web est une application logiciel conçu pour permettre l'interopérabilité machine-to-machine sur un réseau. Il dispose d'une interface décrite dans un format exploitable par machine (spécifiquement WSDL).

D'autres systèmes peuvent d'interagir avec le service Web de la manière prescrite par sa description en utilisant SOAP des messages, généralement transmis via HTTP avec une sérialisation XML en conjonction avec d'autres normes liées au Web.

 

Définition 2  :

  Les Web Services sont la nouvelle vague des applications informatiques. Ce sont des applications modulaires, et auto-descriptives qui permettent l’échange de données et peuvent être publiées, localisées et invoquées depuis le web.

 

 

Intérêt des Web Services  :

·         Ré-utilisabilité et composition

·         Les Web Services sont indépendants de :

     La plate-forme utilisée (Unix, Windows, . . .)

     Leur implémentation (Java, C++, Visual Basic, . . .)

      L’architecture sous-jacente (.Net, J2EE, . . .)

Web Services Scénario complet

image : (Source : http://www.w3.org/TR/2002/WD-ws-arch-20021114/)

 

 

Technologies utilisées :

 

Technologies standards utilisées pour le web service :

 

·         SOAP (Simple Object Access Protocol) protocole pour l’échange et la communication de messages entre WS. Le plus utilisé :

SOAP = HTTP + XML (Requête/réponse = message xml)

·         WSDL (Web Service Description Language) est un langage de description d’interface de web services (comment peut-on interagir avec le service). Le WSDL repose sur XML.

·         UDDI (Universel Description, Discovery and Integration ) registre contenant les adresses des différents Web services. Annuaire contenant les interfaces (Pages Jaunes, Vertes,

Blanches).

 

1.  SOAP (Simple Object Access Protocol) :

 

SOAP est une recommandation du W3C. C'est est un simple protocole basé sur XML pour permettre l'échange d'informations sur les applications HTTP.

 

         La plupart des applications communiquent via HTTP, car ce protocole de transport est supporté par tous les navigateurs Internet et les serveurs. SOAP a été créé pour accomplir cette tâche.
         SOAP fournit un moyen de communiquer entre les applications s'exécutant sur  des systèmes d'exploitation différents, avec différentes technologies et langages de programmation.

 

La structure d'un message SOAP :

 

Un message SOAP repose sur une base XML dont la structure est la suivante :

·         Un élément Envelope qui identifie le document XML comme un message SOAP

·         Un élément Header qui contient des informations d'en-tête. Cette partie contient des informations spécifiques à l'application (comme l'authentification, paiement, etc) sur le message SOAP.

·         Un élément Body qui contient les informations d'appel et de réponse

·         Un élément Fault contenant des erreurs et des informations d'état

 

Structure :

 

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Header>
...
</soap:Header>

<soap:Body>
...
  <soap:Fault>
  ...
  </soap:Fault>
</soap:Body>

</soap:Envelope>

 

 

Remarques :

 

·         Un message SOAP DOIT utiliser l'espace de noms SOAP Envelope

·         Un message SOAP DOIT utiliser l'espace de codage SOAP

·         Un message SOAP doit pas contenir une référence DTD

·         Un message SOAP doit pas contenir d'instructions de traitement XML

 

Exemple de requête SOAP : (Source : http://www.w3schools.com/soap/soap_body.asp    )

 

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body>
  <m:GetPrice xmlns:m="http://www.w3schools.com/prices">
    <m:Item>Apples</m:Item>
  </m:GetPrice>
</soap:Body>

</soap:Envelope>

 

Exemple de reponse SOAP : (Source : http://www.w3schools.com/soap/soap_body.asp    )

 

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body>
  <m:GetPriceResponse xmlns:m="http://www.w3schools.com/prices">
    <m:Price>1.90</m:Price>
  </m:GetPriceResponse>
</soap:Body>

</soap:Envelope>

 

SOAP et le HTTP :

 

Exemple d'une requête HTTP:

 

POST /example HTTP/1.1
Host: 169.123.255.458
Content-Type: text/plain
Content-Length: 200

 

Exemple d'une réponse HTTP:

 

200 OK                     // < = le code HTTP pour une requête traitée avec succès
Content-Type: text/plain
Content-Length: 200

Une requête SOAP peut être un HTTP POST ou une requête HTTP GET.

 

Exemple d'une requête SOAP via HTTP: (Source : http://www.w3schools.com/soap/soap_example.asp)

 

POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPrice>
    <m:StockName>IBM</m:StockName>
  </m:GetStockPrice>
</soap:Body>

</soap:Envelope>

 

Exemple d'une réponse SOAP via HTTP: (Source : http://www.w3schools.com/soap/soap_example.asp)

 

HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPriceResponse>
    <m:Price>34.5</m:Price>
  </m:GetStockPriceResponse>
</soap:Body>

</soap:Envelope>

 

2.    WSDL ( Web Services Description Language) :

 

         Un WSDL est un document écrit en XML. Ce document décrit un service Web en spécifiant  l'emplacement du service et les opérations (ou méthodes) que le service expose.

 

La structure d'un document WSDL :

 

La structure d'un WSDL (pour  la version 1.1) 

 

Le WSDL est subdivisé en plusieurs balise:

 

·         Les Types (types) : un système de types applicables à des données. Utilisation de XML Schema pour définir les types de données.

·         Le Message (message) : décrit les données échangées entre services web. Peut être comparé aux paramètres d’un appel de procédure.

·         Le Type de Port (portType) : définit les opérations du service web et les messages impliqués (de type input, output ou fault). Peut être comparé à une interface Java

·         La Liaison (binding) : définit le format des messages (par exemple soap :body spécifie que le le message considéré sera transmis dans la partie body du message soap) et le protocole utilisé par chaque type de port. C’est l’implémentation de l’interface.

·         Le Port (port) : un point de terminaison identifié de manière unique par la combinaison d’une adresse internet et d’une liaison

·         Un Service (service) : associe des liaisons à des process concrets de mise en œuvre des opérations qu’elles décrivent (typiquement une URL dans le cas d’une liaison mettant en œuvre SOAP sur HTTP)

 

Type d’opération :

Une opération peut être de différents types :

 

Type

Définition

One-way

L'opération reçoit un message en entrée (input) mais ne retourne pas de réponse

Request-response

L'opération reçoit un message en entrée (input) puis retourne une réponse (output)

Solicit-response

L'opération envoie une requête (output) est attend obligatoirement une réponse (input)

Notification

L'opération envoie un message (output) et n'attend pas de réponse

 

 

Structure : (Source : http://www.w3.org/TR/wsdl    )

 

<wsdl:definitions name="nmtoken"? targetNamespace="uri"?>

 

    <import namespace="uri" location="uri"/>*

 

    <wsdl:documentation .... /> ?

 

    <wsdl:types> ?

        <wsdl:documentation .... />?

        <xsd:schema .... />*

        <-- extensibility element --> *

    </wsdl:types>

 

    <wsdl:message name="nmtoken"> *

        <wsdl:documentation .... />?

        <part name="nmtoken" element="qname"? type="qname"?/> *

    </wsdl:message>

 

    <wsdl:portType name="nmtoken">*

        <wsdl:documentation .... />?

        <wsdl:operation name="nmtoken">*

           <wsdl:documentation .... /> ?

           <wsdl:input name="nmtoken"? message="qname">?

               <wsdl:documentation .... /> ?

           </wsdl:input>

           <wsdl:output name="nmtoken"? message="qname">?

               <wsdl:documentation .... /> ?

           </wsdl:output>

           <wsdl:fault name="nmtoken" message="qname"> *

               <wsdl:documentation .... /> ?

           </wsdl:fault>

        </wsdl:operation>

    </wsdl:portType>

 

    <wsdl:binding name="nmtoken" type="qname">*

        <wsdl:documentation .... />?

        <-- extensibility element --> *

        <wsdl:operation name="nmtoken">*

           <wsdl:documentation .... /> ?

           <-- extensibility element --> *

           <wsdl:input> ?

               <wsdl:documentation .... /> ?

               <-- extensibility element -->

           </wsdl:input>

           <wsdl:output> ?

               <wsdl:documentation .... /> ?

               <-- extensibility element --> *

           </wsdl:output>

           <wsdl:fault name="nmtoken"> *

               <wsdl:documentation .... /> ?

               <-- extensibility element --> *

           </wsdl:fault>

        </wsdl:operation>

    </wsdl:binding>

 

    <wsdl:service name="nmtoken"> *

        <wsdl:documentation .... />?

        <wsdl:port name="nmtoken" binding="qname"> *

           <wsdl:documentation .... /> ?

           <-- extensibility element -->

        </wsdl:port>

        <-- extensibility element -->

    </wsdl:service>

 

    <-- extensibility element --> *

 

</wsdl:definitions>

 

 

WSDL 1.1 ou WSDL 2.0 ?

 

WSDL (en version 2.0) est devenu une recommandation du W3C depuis juin 2007.

Différence entre les deux version

 

 

image (Source : http://en.wikipedia.org/wiki/Web_Services_Description_Language )

La version WSDL 2.0 permet  :

 

·        Une intégration de toute les méthodes de requêtes HTTP (non seulement GET et POST comme dans la version 1.1)

·        Un meilleur support pour les services Web RESTful, ainsi ils devient beaucoup plus simple à mettre en œuvre.

 

Remarques :

 

L'utilisation de cette spécification est encore faible par rapport au  WSDL 1.1 . De plus, la dernière version (version 2.0) de la Business Process Execution Language (BPEL) pour la composition centraliser des Web service prend uniquement en charge WSDL 1.1

 

 

        Exemple de WS avec JAX-WS  :

 

Remarque :

Cette exemple montre le développement d'un WS avec une approche code first.

 

1)  Dans un nouveau Dynamic Web Project créer la classe suivante :

 

package com.exemple.jaxws.hello;

 

import javax.jws.WebService;

 

@WebService

public class Hello {

 

       public String sayHi(String text) {

             System.out.println("Here the welcom message");

             return "Hello : " + text;

       }

 

}

 

2)   Dans une console écrire l'instruction suivante :

 

wsgen −cp . −d  ../..src −keep -wsdl com.exemple.jaxws.hello.Hello

 

Cette commande permet de générer le WSDL associer a notre service ainsi qu'un nouveau fichier nommé jaxws contenant deux classe pour l'envoie et la réception d'un  message à notre service comme le montre la figure suivante :

 

 

 

Afin de pouvoir publier notre service il nous faut ajouter une nouvelle classe avec une méthode main dans laquelle on donne l'URL de publication.

 

package com.exemple.jaxws.hello;

 

import javax.xml.ws.Endpoint;

 

public class HelloWsPublication {

 

       /**

        * @param args

        */

       public static void main(String[] args) {

             Endpoint.publish("http://localhost:8080/Hello", new Hello());

 

       }

}

 

Nous reste plus qu'a lancer l’exécution de notre classe comme  une java application. Maintenant on a accès l'interface de notre service via l'URL suivante :

http://localhost:8080/Hello?wsdl

 

 

 

 

Tester notre Web service :

 

Il est possible maintenant de pourvoir testez notre service en utilisant l'outil SoapUI :

 

La figure suivante représente l'envoi/la réception du message en HTTP:

La figure suivante représente l'envoi/la réception du message SOAP :

 

 

 

 

 

 

 

 

 

 

 

Création d'un Web Service client pour tester notre Hello WS :

 

Remarque :

Cette exemple est très similaire au développement d'un WS avec une approche WSDL first.

 

1)    Créer un nouveau Dynamic Web Project. A partir de votre console placez-vous dans le répertoire src et tapez la commande suivante :

 

wsimport -keep http://localhost:8080/Hello?wsdl

 

Cette commande va créer tous les artefacts nécessaire pour votre service.

 

NB : Cette méthode est aussi valable avec une URL pour le WSDL de façon statique (le chemin ou se trouve votre fichier WSDL sur votre machine), cependant, pour utiliser le Web service il faudrait qu'il soit préalablement déployer.

 

Créer une classe Client pour invoker le service :

 

package com.exemple.jaxws.client;

 

import com.exemple.jaxws.hello.Hello;

import com.exemple.jaxws.hello.HelloService;

 

public class MyClient {

 

       /**

        * @param args

        */

       public static void main(String[] args) {

             HelloService myWService = new HelloService();

             Hello myConnection = myWService.getHelloPort();

             System.out.println(myConnection.sayHi("Maria"));

 

       }

}

 

 Et Voilà ! Vous avez communiqué avec votre service grâce a votre client.

 

 

 

Utilisation de Apache CXF pour la création de notre service :

 

Télécharger l'archive Apache CXF puis la décompresser dans le répertoire de votre choix.

 

1.    Configuration de Tomcat dans Eclipse :

·         Dans Eclipse : window ⇒ préférences ⇒ Web services ⇒ CXF 2.x preferences ⇒ ajouter le répertoire de votre apache cxf

·         Puis encore : window ⇒ préférences ⇒  Web services ⇒ Server and Runtime ⇒Web service runtime choisir apache cxf 2.x

 

2. Créer un nouveau Dynamic Web Project :

 

1.    Choisissez un nom pour notre projet

2.    Target Runtime : tomcat

3.    Dynamic Web modul version : la derniere (dans mon cas c'est la 2.5)

4.    Configuration : CXF Web Services Project v2.5

 

 

 

                                

3.                                                                            

4.                                                                            

5.                                                                            

6.                                                                            

7.                                                                            

 

 

 

 

 

 

 

 

 

 

3. Créer un nouvelle classe avec « sayHello » comme méthode :

 

          4. Créer un nouvel Web service à partire de votre classe :

·         Le nouveau service est de type Bottom Up (code First)

·         Configurer aussi votre service pour qu'il est un Client pour le tester

 

 

 

        

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5.            Indiquer un SEI (Service Endpiont Interface ) pour votre service comme suit :

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 6. Ajouter des annotations si vous le souhaités

 7. Votre service est disponible :

 

 

 

 

  8.  Sélectionner l'opération sayHello et ajouter un nouvelle argument

Vous pouvez également tester votre service avec le client généré par apache :

 

 

===== > (Partie pas finie : en dessous )

Apache CXF :

 

 

Apache CXF est un framework open source pour le développement de Web services. Ce framework repose sur des standards et protocoles de communication.

 

 

 

 

 

 

 

(source : )

Apache  CXF offre un support (presque) complet pour le développement et la consommation de Web service :

-

 

 

 

 

 

Cependant Apache peut sembler difficile à manipuler les premières fois. L'objectif de ce tutoriel est de simplifier la prise en main de ce framework.

 

Tutoriel sur les WS :

 

 

Définition d'un Web Service :

 

Définition 1 (W3C) :

  Un service Web est une application logiciel conçu pour permettre l'interopérabilité machine-to-machine sur un réseau. Il dispose d'une interface décrite dans un format exploitable par machine (spécifiquement WSDL).

D'autres systèmes peuvent d'interagir avec le service Web de la manière prescrite par sa description en utilisant SOAP des messages, généralement transmis via HTTP avec une sérialisation XML en conjonction avec d'autres normes liées au Web.

 

Définition 2  :

  Les Web Services sont la nouvelle vague des applications informatiques. Ce sont des applications modulaires, et auto-descriptives qui permettent l’échange de données et peuvent être publiées, localisées et invoquées depuis le web.

 

 

Intérêt des Web Services  :

·         Ré-utilisabilité et composition

·         Les Web Services sont indépendants de :

     La plate-forme utilisée (Unix, Windows, . . .)

     Leur implémentation (Java, C++, Visual Basic, . . .)

      L’architecture sous-jacente (.Net, J2EE, . . .)


image : (Source : http://www.w3.org/TR/2002/WD-ws-arch-20021114/)

 

 

Technologies utilisées :

 

Technologies standards utilisées pour le web service :

 

·         SOAP (Simple Object Access Protocol) protocole pour l’échange et la communication de messages entre WS. Le plus utilisé :

SOAP = HTTP + XML (Requête/réponse = message xml)

·         WSDL (Web Service Description Language) est un langage de description d’interface de web services (comment peut-on interagir avec le service). Le WSDL repose sur XML.

·         UDDI (Universel Description, Discovery and Integration ) registre contenant les adresses des différents Web services. Annuaire contenant les interfaces (Pages Jaunes, Vertes,

Blanches).

 

1.  SOAP (Simple Object Access Protocol) :

 

SOAP est une recommandation du W3C. C'est est un simple protocole basé sur XML pour permettre l'échange d'informations sur les applications HTTP.

 

         La plupart des applications communiquent via HTTP, car ce protocole de transport est supporté par tous les navigateurs Internet et les serveurs. SOAP a été créé pour accomplir cette tâche.
         SOAP fournit un moyen de communiquer entre les applications s'exécutant sur  des systèmes d'exploitation différents, avec différentes technologies et langages de programmation.

 

La structure d'un message SOAP :

 

Un message SOAP repose sur une base XML dont la structure est la suivante :

·         Un élément Envelope qui identifie le document XML comme un message SOAP

·         Un élément Header qui contient des informations d'en-tête. Cette partie contient des informations spécifiques à l'application (comme l'authentification, paiement, etc) sur le message SOAP.

·         Un élément Body qui contient les informations d'appel et de réponse

·         Un élément Fault contenant des erreurs et des informations d'état

 

Structure :

 

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Header>
...
</soap:Header>

<soap:Body>
...
  <soap:Fault>
  ...
  </soap:Fault>
</soap:Body>

</soap:Envelope>

 

 

Remarques :

 

·         Un message SOAP DOIT utiliser l'espace de noms SOAP Envelope

·         Un message SOAP DOIT utiliser l'espace de codage SOAP

·         Un message SOAP doit pas contenir une référence DTD

·         Un message SOAP doit pas contenir d'instructions de traitement XML

 

Exemple de requête SOAP : (Source : http://www.w3schools.com/soap/soap_body.asp    )

 

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body>
  <m:GetPrice xmlns:m="http://www.w3schools.com/prices">
    <m:Item>Apples</m:Item>
  </m:GetPrice>
</soap:Body>

</soap:Envelope>

 

Exemple de reponse SOAP : (Source : http://www.w3schools.com/soap/soap_body.asp    )

 

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body>
  <m:GetPriceResponse xmlns:m="http://www.w3schools.com/prices">
    <m:Price>1.90</m:Price>
  </m:GetPriceResponse>
</soap:Body>

</soap:Envelope>

 

SOAP et le HTTP :

 

Exemple d'une requête HTTP:

 

POST /example HTTP/1.1
Host: 169.123.255.458
Content-Type: text/plain
Content-Length: 200

 

Exemple d'une réponse HTTP:

 

200 OK                     // < = le code HTTP pour une requête traitée avec succès
Content-Type: text/plain
Content-Length: 200

Une requête SOAP peut être un HTTP POST ou une requête HTTP GET.

 

Exemple d'une requête SOAP via HTTP: (Source : http://www.w3schools.com/soap/soap_example.asp)

 

POST /InStock HTTP/1.1
Host: www.example.org
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 250

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPrice>
    <m:StockName>IBM</m:StockName>
  </m:GetStockPrice>
</soap:Body>

</soap:Envelope>

 

Exemple d'une réponse SOAP via HTTP: (Source : http://www.w3schools.com/soap/soap_example.asp)

 

HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: nnn

<?xml version="1.0"?>
<soap:Envelope
xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">

<soap:Body xmlns:m="http://www.example.org/stock">
  <m:GetStockPriceResponse>
    <m:Price>34.5</m:Price>
  </m:GetStockPriceResponse>
</soap:Body>

</soap:Envelope>

 

2.    WSDL ( Web Services Description Language) :

 

         Un WSDL est un document écrit en XML. Ce document décrit un service Web en spécifiant  l'emplacement du service et les opérations (ou méthodes) que le service expose.

 

La structure d'un document WSDL :

 

La structure d'un WSDL (pour  la version 1.1) 

 

Le WSDL est subdivisé en plusieurs balise:

 

·         Les Types (types) : un système de types applicables à des données. Utilisation de XML Schema pour définir les types de données.

·         Le Message (message) : décrit les données échangées entre services web. Peut être comparé aux paramètres d’un appel de procédure.

·         Le Type de Port (portType) : définit les opérations du service web et les messages impliqués (de type input, output ou fault). Peut être comparé à une interface Java

·         La Liaison (binding) : définit le format des messages (par exemple soap :body spécifie que le le message considéré sera transmis dans la partie body du message soap) et le protocole utilisé par chaque type de port. C’est l’implémentation de l’interface.

·         Le Port (port) : un point de terminaison identifié de manière unique par la combinaison d’une adresse internet et d’une liaison

·         Un Service (service) : associe des liaisons à des process concrets de mise en œuvre des opérations qu’elles décrivent (typiquement une URL dans le cas d’une liaison mettant en œuvre SOAP sur HTTP)

 

Type d’opération :

Une opération peut être de différents types :

 

Type

Définition

One-way

L'opération reçoit un message en entrée (input) mais ne retourne pas de réponse

Request-response

L'opération reçoit un message en entrée (input) puis retourne une réponse (output)

Solicit-response

L'opération envoie une requête (output) est attend obligatoirement une réponse (input)

Notification

L'opération envoie un message (output) et n'attend pas de réponse

 

 

Structure : (Source : http://www.w3.org/TR/wsdl    )

 

<wsdl:definitions name="nmtoken"? targetNamespace="uri"?>

 

    <import namespace="uri" location="uri"/>*

 

    <wsdl:documentation .... /> ?

 

    <wsdl:types> ?

        <wsdl:documentation .... />?

        <xsd:schema .... />*

        <-- extensibility element --> *

    </wsdl:types>

 

    <wsdl:message name="nmtoken"> *

        <wsdl:documentation .... />?

        <part name="nmtoken" element="qname"? type="qname"?/> *

    </wsdl:message>

 

    <wsdl:portType name="nmtoken">*

        <wsdl:documentation .... />?

        <wsdl:operation name="nmtoken">*

           <wsdl:documentation .... /> ?

           <wsdl:input name="nmtoken"? message="qname">?

               <wsdl:documentation .... /> ?

           </wsdl:input>

           <wsdl:output name="nmtoken"? message="qname">?

               <wsdl:documentation .... /> ?

           </wsdl:output>

           <wsdl:fault name="nmtoken" message="qname"> *

               <wsdl:documentation .... /> ?

           </wsdl:fault>

        </wsdl:operation>

    </wsdl:portType>

 

    <wsdl:binding name="nmtoken" type="qname">*

        <wsdl:documentation .... />?

        <-- extensibility element --> *

        <wsdl:operation name="nmtoken">*

           <wsdl:documentation .... /> ?

           <-- extensibility element --> *

           <wsdl:input> ?

               <wsdl:documentation .... /> ?

               <-- extensibility element -->

           </wsdl:input>

           <wsdl:output> ?

               <wsdl:documentation .... /> ?

               <-- extensibility element --> *

           </wsdl:output>

           <wsdl:fault name="nmtoken"> *

               <wsdl:documentation .... /> ?

               <-- extensibility element --> *

           </wsdl:fault>

        </wsdl:operation>

    </wsdl:binding>

 

    <wsdl:service name="nmtoken"> *

        <wsdl:documentation .... />?

        <wsdl:port name="nmtoken" binding="qname"> *

           <wsdl:documentation .... /> ?

           <-- extensibility element -->

        </wsdl:port>

        <-- extensibility element -->

    </wsdl:service>

 

    <-- extensibility element --> *

 

</wsdl:definitions>

 

 

WSDL 1.1 ou WSDL 2.0 ?

 

WSDL (en version 2.0) est devenu une recommandation du W3C depuis juin 2007.

Différence entre les deux version

 

 

image (Source : http://en.wikipedia.org/wiki/Web_Services_Description_Language )

La version WSDL 2.0 permet  :

 

·        Une intégration de toute les méthodes de requêtes HTTP (non seulement GET et POST comme dans la version 1.1)

·        Un meilleur support pour les services Web RESTful, ainsi ils devient beaucoup plus simple à mettre en œuvre.

 

Remarques :

 

L'utilisation de cette spécification est encore faible par rapport au  WSDL 1.1 . De plus, la dernière version (version 2.0) de la Business Process Execution Language (BPEL) pour la composition centraliser des Web service prend uniquement en charge WSDL 1.1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

        Exemple de WS avec JAX-WS  :

 

Remarque :

Cette exemple montre le développement d'un WS avec une approche code first.

 

1)  Dans un nouveau Dynamic Web Project créer la classe suivante :

 

package com.exemple.jaxws.hello;

 

import javax.jws.WebService;

 

@WebService

public class Hello {

 

       public String sayHi(String text) {

             System.out.println("Here the welcom message");

             return "Hello : " + text;

       }

 

}

 

2)   Dans une console écrire l'instruction suivante :

 

wsgen −cp . −d  ../..src −keep -wsdl com.exemple.jaxws.hello.Hello

 

Cette commande permet de générer le WSDL associer a notre service ainsi qu'un nouveau fichier nommé jaxws contenant deux classe pour l'envoie et la réception d'un  message à notre service comme le montre la figure suivante :

 

 

 

Afin de pouvoir publier notre service il nous faut ajouter une nouvelle classe avec une méthode main dans laquelle on donne l'URL de publication.

 

package com.exemple.jaxws.hello;

 

import javax.xml.ws.Endpoint;

 

public class HelloWsPublication {

 

       /**

        * @param args

        */

       public static void main(String[] args) {

             Endpoint.publish("http://localhost:8080/Hello", new Hello());

 

       }

}

 

Nous reste plus qu'a lancer l’exécution de notre classe comme  une java application. Maintenant on a accès l'interface de notre service via l'URL suivante :

http://localhost:8080/Hello?wsdl

 

 

 

 

Tester notre Web service :

 

Il est possible maintenant de pourvoir testez notre service en utilisant l'outil SoapUI :

 

La figure suivante représente l'envoi/la réception du message en HTTP:

La figure suivante représente l'envoi/la réception du message SOAP :

 

 

 

 

 

 

 

 

 

 

 

Création d'un Web Service client pour tester notre Hello WS :

 

Remarque :

Cette exemple est très similaire au développement d'un WS avec une approche WSDL first.

 

1)    Créer un nouveau Dynamic Web Project. A partir de votre console placez-vous dans le répertoire src et tapez la commande suivante :

 

wsimport -keep http://localhost:8080/Hello?wsdl

 

Cette commande va créer tous les artefacts nécessaire pour votre service.

 

NB : Cette méthode est aussi valable avec une URL pour le WSDL de façon statique (le chemin ou se trouve votre fichier WSDL sur votre machine), cependant, pour utiliser le Web service il faudrait qu'il soit préalablement déployer.

 

Créer une classe Client pour invoker le service :

 

package com.exemple.jaxws.client;

 

import com.exemple.jaxws.hello.Hello;

import com.exemple.jaxws.hello.HelloService;

 

public class MyClient {

 

       /**

        * @param args

        */

       public static void main(String[] args) {

             HelloService myWService = new HelloService();

             Hello myConnection = myWService.getHelloPort();

             System.out.println(myConnection.sayHi("Maria"));

 

       }

}

 

 Et Voilà ! Vous avez communiqué avec votre service grâce a votre client.

 

 

 

Utilisation de Apache CXF pour la création de notre service :

 

Télécharger l'archive Apache CXF puis la décompresser dans le répertoire de votre choix.

 

1.    Configuration de Tomcat dans Eclipse :

·         Dans Eclipse : window ⇒ préférences ⇒ Web services ⇒ CXF 2.x preferences ⇒ ajouter le répertoire de votre apache cxf

·         Puis encore : window ⇒ préférences ⇒  Web services ⇒ Server and Runtime ⇒Web service runtime choisir apache cxf 2.x

 

2. Créer un nouveau Dynamic Web Project :

 

1.    Choisissez un nom pour notre projet

2.    Target Runtime : tomcat

3.    Dynamic Web modul version : la derniere (dans mon cas c'est la 2.5)

4.    Configuration : CXF Web Services Project v2.5

 

 

 

                                

3.                                                                            

4.                                                                            

5.                                                                            

6.                                                                            

7.                                                                            

 

 

 

 

 

 

 

 

 

 

3. Créer un nouvelle classe avec « sayHello » comme méthode :

 

          4. Créer un nouvel Web service à partire de votre classe :

·         Le nouveau service est de type Bottom Up (code First)

·         Configurer aussi votre service pour qu'il est un Client pour le tester

 

 

 

        

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5.            Indiquer un SEI (Service Endpiont Interface ) pour votre service comme suit :

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 6. Ajouter des annotations si vous le souhaités

 7. Votre service est disponible :

 

 

 

 

  8.  Sélectionner l'opération sayHello et ajouter un nouvelle argument

Vous pouvez également tester votre service avec le client généré par apache :

 

 

===== > (Partie pas finie : en dessous )

Apache CXF :

 

 

Apache CXF est un framework open source pour le développement de Web services. Ce framework repose sur des standards et protocoles de communication.

 

 

 

 

 

 

 

(source : )

Apache  CXF offre un support (presque) complet pour le développement et la consommation de Web service :

-

 

 

 

 

 

Cependant Apache peut sembler difficile à manipuler les premières fois. L'objectif de ce tutoriel est de simplifier la prise en main de ce framework.

.
X
 
 
 
 
 

You havecharacters left.