Les services Web
Un exemple de service web en Java
Création du service
Pour tester les service web, on a mettre en place une application qui effectue juste des calculs. L'application installée sur le serveur se contentera d'effectuer des additions et des soustractions avec les arguments qu'on lui passera en paramètre.
Voici à quoi ressemble le fichier Calculator.java
public class Calculator { public int add(int p1, int p2) { return p1 + p2; } public int subtract(int p1, int p2) { return p1 - p2; } }
Il y a plusieurs manières de déployer les services fournis par cette classe. On s'intéresse à la manière la plus simple de procéder. Pour cela, il faut renommer le fichier Calculator.java en Calculator.jws. Pour deployer le service, il suffit de placer ce fichier dans le répertoire « webapps/axis/ » de Tomcat. Voila, le service est déployé. Le fichier WSDL est généré à la volée par AXIS. On peut la consulter sur ce lien http://localhost:8080/axis/Calculator.jws
Utiliser le service via un client écrit en Java
Il ne reste plus qu'à écrire le client permettant d'interroger le service via une application. La classe principale est « Call » qui permet d'invoquer les méthodes du service.
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 CalcClient { public static void main(String [] args) throws Exception { Options options = new Options(args); String endpoint = "http://localhost:8080/axis/Calculator.jws"; // Do argument checking args = options.getRemainingArgs(); if (args == null || args.length != 3) { return; } String method = args[0]; if (!(method.equals("add") || method.equals("subtract"))) { return; } // Make the call Integer i1 = new Integer(args[1]); Integer i2 = new Integer(args[2]); Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new java.net.URL(endpoint)); call.setOperationName( method ); call.addParameter("op1", XMLType.XSD_INT, ParameterMode.PARAM_MODE_IN); call.addParameter("op2", XMLType.XSD_INT, ParameterMode.PARAM_MODE_IN); call.setReturnType(XMLType.XSD_INT); Integer ret = (Integer) call.invoke( new Object [] { i1, i2 }); System.out.println("Got result : " + ret); } }
On fixe l'adresse du service avec la méthode « setTargetEndpointAddress »
On précise la méthode qu'on souhaite invoquer avec call.setOperationName( method );
Les types de paramètres sont présisé avec
call.addParameter("op1", XMLType.XSD_INT, ParameterMode.PARAM_MODE_IN);
call.addParameter("op2", XMLType.XSD_INT, ParameterMode.PARAM_MODE_IN);
Le type de retour
call.setReturnType(XMLType.XSD_INT);
Et enfin l'appel de la méthode avec récupération de la valeur de retour
Integer ret = (Integer) call.invoke( new Object [] { i1, i2 });