network : antoine.guiral.info bertrand.guiral.info

Ecrire un Web-Service en Java: JAX-WS

Ce ne sera pas long!
1- Il faut écrire la classe dont les méthodes seront accessibles par Web-Service

  1.  
  2. package com.bg.test.webService;
  3.  
  4. import javax.jws.WebMethod;
  5. import javax.jws.WebParam;
  6. import javax.jws.WebResult;
  7. import javax.jws.WebService;
  8.  
  9. @WebService
  10. public class ValidationVisaCard {
  11.  
  12.     public ValidationVisaCard() {
  13.     }
  14.  
  15.     @WebMethod
  16.     @WebResult( name="CardStatus")
  17.     public String validate(@WebParam(name="numero") String numero,@WebParam(name="name")  String name,@WebParam(name="date")  String date){
  18.         // Ecrire un traitement ici! Le plus leger possible cependant
  19.         return "ok";
  20.     }
  21.  
  22.     @WebMethod
  23.     @WebResult(name="helloResult")
  24.     public String sayHello(){
  25.         System.out.println("Hello");
  26.         return "Hello";
  27.     }
  28.  
  29. }
  30.  

On remarque les annotations. Leur sens est clair , et ne demande pas plus d’explications .
Ensuite , il faut prevoir une methode pour lancer le ws :
(Et oui, java comporte un serveur http en standard! Mais ou est passé le soap ? On rève!)

  1.  
  2. package com.bg.test.webService;
  3.  
  4. import javax.xml.ws.Endpoint;
  5.  
  6. public class MainWS_Simple {
  7.  
  8.     public static void main(String[] args) {
  9.         String r = "http://localhost:8083/bg/monPremierTest";
  10.         System.out.println("WS wsdl  "+r+"?wsdl");
  11.         Endpoint endpoint = Endpoint.publish(r, new ValidationVisaCard());
  12.     }
  13. }
  14.  

Si vous exécutez , a ce stade , vous allez avoir une exception:
class: com.bg.test.webService.jaxws.ValidateCard could not be found

La compilation est un plus délicate : Il faut générer des classes qui permettront de lancer le Web-Service.

Soit on appelle directement l’outil wsgen qui est fourni dans le jdk; soit on utilise ant pour activer cet outil..

Il faut bien compiler avec les options target et source pour java 1.6

Je suppose également que le directory jdk1.6.xx/bin est dans le path system (Pour trouver l’utilitaire wsgen)
Voilà le fichier ant qui permet de compiler et d’appeler wsgen:

  1.  
  2. <project name="testWS" default="bg-generate-server-artifacts">
  3.  
  4.     <target name="bg-compile" depends="">
  5.        <mkdir dir="classes"/>
  6.        <javac srcdir="src/main/java"
  7.                       destdir="classes"
  8.                     source="1.6"
  9.                     target="1.6"
  10.                       deprecation="on">
  11.        </javac>
  12.     </target>
  13.  
  14.     <target name="bg-generate-server-artifacts" depends="bg-compile">
  15.         <echo message="Generates the server artifacts"/>
  16.         <mkdir dir="classesGenerated"/>
  17.         <mkdir dir="srcGenerated"/>
  18.         <exec executable="wsgen" failonerror="true">
  19.              <arg line=" -cp classes"/>
  20.              <arg line=" -d classesGenerated"/>
  21.              <arg line=" -keep"/>
  22.              <arg line=" -wsdl"/>
  23.              <arg line=" -r srcGenerated"/>
  24.              <arg line=" -s srcGenerated"/>
  25.              <arg line=" com.bg.test.webService.ValidationVisaCard"/>
  26.          </exec>
  27.      </target>  
  28. </project>
  29.  

On peut (Il est même vivement conseillé!) regarder les fichiers générés (Les .java, les wsdl, les shema)
C’est presque fini.
Il y a plus qu’à mettre le directory “classesGenerated” dans le classpath, et lancer notre application.

Il y a une trace :
WS wsdl http://localhost:8083/bg/monPremierTest?wsdl

Prenez un navigateur, et contemplez votre wsdl!

Il y a d’autres API qui permettent de générer des Web-Services (Voir Axis, et cxf, 2 produits fabuleux d’apache).
Tel que nous l’avons fait, l’emploi de wsgen est un peu lourd peut être?
Qu’en pensez vous ?

Promouvoir cet article : Ces icônes sont des liens vers des sites de partage de signet sociaux où les lecteurs peuvent partager et découvrir de nouveaux liens.
  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google
  • blogmarks
  • BlogMemes
  • co.mments
  • e-mail
  • Live
  • Ma.gnolia
  • Scoopeo
  • Technorati
  • Wikio FR

Laissez un commentaire