Web Services, JAX-WS et intéropérabilité (partie 1)
2010-10-21 11:29
Write commentLe besoin initial étant d'exporter une méthode avec un métier très simple en un webservice et avec un document WSDL correct et surtout interopérable (Document/Literal wrapped)!
Le défit à relver est d'arriver à générer ce WSDL à partir du code avec des types complexes en entrée et en sortie.
Je vais essayer tout au long de cet article de vous proposer un petit exemple qui résumera quasiment toutes les difficultés qu'on pourrait rencontrer dans ce type de projets (Les valeurs requises, les énumérations, les exceptions, les headers, les types d'entrée et de retour complexes). Vous êtes prêts ?
C’est parti !
1. Le métier à implémenter et un web service primitif
Voici un métier tout simple, la classe « MonMetier » possède une méthode « MaMethode » permettant de prendre en paramètres un nom et un prénom, et les retourne selon un tableau complexe de type clé-valeur.
Voici un exemple :
Les arguments:
Prénom : Jean Michel
Nom : Jarre
Le retour:
Tableau ['Prénom']=Jean Michel
Tableau ['Nom']=Jarre; Voici la classe de ce métier, j’ai choisit comme type de retour le type HashMap public class MonMetier
{
MonMetier()
{
//c'est pas important
}
public HashMap MaMethode(String nom, String prenom)
{
HashMap map=new HashMap();
map.put("Nom",nom);
map.put("Prenom",prenom);
return map;
}
}
@WebService(name="MonWebService")
public class MonWebService {
@WebMethod(operationName="MaMethodeService")
public HashMap MaMethodeService(
@WebParam(name="nom")
String nom,
@WebParam(name="prenom")
String prenom)
{
MonMetier metier=new MonMetier();
return metier.MaMethode(nom, prenom);
}
}
Après le déploiement (WAR pour mon cas) on peut consulter le WSDL de ce web service en entrant l’URL de ce dernier dans un navigateur.Et voici le schéma XSD généré:

On remarque que le type HashMap n'a pas été généré en mode clé-valeur, ce qui n'est pas bon pour la suite, car en essayant de consommer ce web service on reçoit l'adresse de l'objet mais aucune valeur.
test.HashMap : "test.HashMap@8608b9".
Comment remédier à ce problème si on a un type complexe à retourner (comme notre fameux tableau de clé valeur), ca sera discuté sur la deuxième partie (next) de cet article.


