Ceci est un exemple simple de SCS à l'aide d'un service Web en Java 1.6. Vous pourrez comparer par vous-mêmes avec des programmes équivalents dans les langages que vous connaissez.
Tout d'abord, une procédure de travail s'impose :
Le service Web sera exposé à travers une interface (ici, l'interface ICoucou, exposant un service de salutations nommé saluer()). Remarquez les annotations @WebService, @SOAPBinding(style = Style.RPC) et @WebMethod, qui guident la génération du code pour un service Web. Ceci remplace avantageusement des technologies antérieures par lesquelles les interfaces WSDL étaient générées par un compilateur tiers. |
package exemple00.ws; import javax.jws.WebService; import javax.jws.WebMethod; import javax.jws.soap.SOAPBinding; import javax.jws.soap.SOAPBinding.Style; @WebService @SOAPBinding(style = Style.RPC) public interface ICoucou { @WebMethod String saluer(String nom); } |
Le service implémentant ICoucou ici sera représenté par la classe Coucou. Remarquez l'annotation pour le service, qui assure une correspondance avec l'interface ICoucou ci-dessus. Remarquez aussi que l'annotation @WebMethod n'a pas à être répétée ici (celle de l'interface suffit). |
package exemple00.ws; import javax.jws.WebService; @WebService(endpointInterface = "exemple00.ws.ICoucou") public class Coucou implements ICoucou { public String saluer(String nom) { return "Coucou " + nom; } } |
Le service doit être publié par un serveur. Ici, nous utiliserons un petit serveur tout simple qui ne fera que cela, soit la classe ServeurCoucou. Remarquez l'association d'une instance de Coucou, ci-dessus, à l'adresse locale, port 9988 (un choix arbitraire). Ce serveur instanciera le service en question et gérera les invocations par de multiples clients. |
package exemple00.ws; import javax.xml.ws.Endpoint; public class ServeurCoucou { public static void main (String [] args) { Endpoint.publish("http://127.0.0.1:9988/coucou", new Coucou()); } } |
Enfin, un petit client, nommé ClientCoucou, accédera au service :
Ne restera plus qu'à invoquer le service. |
package exemple00.ws; import javax.xml.namespace.QName; import javax.xml.ws.Service; import java.net.URL; import java.net.MalformedURLException; class ClientCoucou { public static void main (String [] args) { try { URL url_wsdl = new URL("http://127.0.0.1:9988/coucou?wsdl"); QName nomService = new QName ("http://ws.ift604/", "CoucouService"); Service service = Service.create(url_wsdl, nomService); ICoucou p = service.getPort(ICoucou.class); System.out.println(p.saluer("Prof")); } catch (MalformedURLException mfe) { } } } |
Lancement du serveur | Lancement du client |
|
|
Et voilà!
Vous pourrez poursuivre avec l'exemple 01 (à venir)...