Web Service - Top-down et Bottom-up développement

Le développement top-down consiste à créer un fichier WSDL, puis la création du service Web à l'aide du fichier WSDL. Avec cette approche, on conçoit d'abord l'implémentation du service web que l'on défini dans un fichier WSDL. Ensuite, on créé le squelette des classes java à partir du WSDL, et on y ajoute le code nécessaire.

Avec l'approche bottom-up, on créé d'abord les classes du service web, ensuite on créé le fichier WSDL à partir ce ces classes.


Rappel : 
  • top-down :  WSDL ==> Classes Java
  • bottom-upClasses Java ==> WSDL 


Voici un exemple de développement de web service "bottom-up". 3 composants sont importants : SEI, SIB, Endpoint publisher.
  • SEI (Service Endpoint interface) : C'est l'interface qui défini les méthodes à appeler (opérations).
  • SIB (Service implementation Bean) : C'est l'implémentation de cette interface. Ce peut être un POJP ou un EJB sesion stateless.
  • La class java.xml.EndPoint est utilisée pour publier le web service depuis une simple application java standalone. Mais attention, EndPoint ne peut gérer qu'une requête à la fois. C'est un outil pour le développement. 
SEI

package com.adl.ws;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public interface TimeService {
 @WebMethod
 String getTimeFromServer();
}

SIB

package com.adl.ws;
import java.util.Date;
import javax.jws.WebService;

@WebService(endpointInterface = "com.adl.ws.TimeService")
public class TimeServiceImpl implements TimeService {
 public String getTimeFromServer() {
  return new Date().toString();
 }
}

EndPoint Publisher

package com.adl.ws;
import javax.xml.ws.Endpoint;

public class TimeServicePublisher {

  public static void main(String[] args) {
      Endpoint endpoint = Endpoint.create(new TimeServiceImpl());
      endpoint.publish("http://127.0.0.1:8888/timews");
    }
}


On peut maintenant voir le fichier WSDL sur son browser :
http://127.0.0.1:8888/timews?wsdl
<definitions name="TimeServiceImplService" targetNamespace="http://ws.adl.com/"
 xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:tns="http://ws.adl.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
 xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
 xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy"
 xmlns:wsp="http://www.w3.org/ns/ws-policy"
 xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">

 <types>
    <xsd:schema>
             <xsd:import schemaLocation="http://127.0.0.1:8888/timews?xsd=1"
                   namespace="http://ws.adl.com/" />
    </xsd:schema>
 </types>

 <message name="getTimeFromServer">
    <part name="parameters" element="tns:getTimeFromServer" />
 </message>
 <message name="getTimeFromServerResponse">
    <part name="parameters" element="tns:getTimeFromServerResponse" />
 </message>

 <portType name="TimeService">
    <operation name="getTimeFromServer">
              <input message="tns:getTimeFromServer"  wsam:Action="http://ws.adl.com/TimeService/getTimeFromServerRequest" />
              <output message="tns:getTimeFromServerResponse"
wsam:Action="http://ws.adl.com/TimeService/getTimeFromServerResponse" />
    </operation>
 </portType>

 <binding name="TimeServiceImplPortBinding" type="tns:TimeService">
            <soap:binding style="document" transport=             "http://schemas.xmlsoap.org/soap/http" />
      <operation name="getTimeFromServer">
      <soap:operation soapAction="" />
      <input>
  <soap:body use="literal" />
      </input>
      <output>
  <soap:body use="literal" />
      </output>
   </operation>
 </binding>

 <service name="TimeServiceImplService">
     <port name="TimeServiceImplPort" 
                      binding= "tns:TimeServiceImplPortBinding">
            <soap:address location="http://127.0.0.1:8888/timews" /></port>
 </service>
</definitions>
Développons maintenant une application cliente de ce web service pour vérifier le bon fonctionnement.
package com.adl.client;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import com.adl.ws.TimeService;
import java.net.URL;
import java.net.MalformedURLException;

class TimeClient {
   public static void main(String[] args) throws MalformedURLException {
      URL url = new URL("http://127.0.0.1:8888/timews?wsdl");
      QName qname = new QName("http://ws.adl.com/", "TimeServiceImplService");
      Service service = Service.create(url, qname);
      TimeService port = service.getPort(TimeService.class);
      System.out.println("Current Time = " + port.getTimeFromServer());
   }
}

Message SOAP envoyé par le client :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                  xmlns:ws="http://ws.adl.com/">
   <soapenv:Header/>
   <soapenv:Body>
      <ws:getTimeFromServer/>
   </soapenv:Body>
</soapenv:Envelope>
Réponse SOAP envoyé par le webservice:
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:getTimeFromServerResponse xmlns:ns2="http://ws.adl.com/">
         <return>Fri Mar 14 15:00:00 CET 2014</return>
      </ns2:getTimeFromServerResponse>
   </S:Body>
</S:Envelope>
Résultat : Current Time = Fri Mar 14 15:00:00 CET 2014

Aucun commentaire:

Enregistrer un commentaire