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 :
Voici un exemple de développement de web service "bottom-up". 3 composants sont importants : SEI, SIB, Endpoint publisher.
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-up : Classes 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>
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