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 });