Bonjour à tous,
Voici ma seconde question à propos des services web JavaEE :
J'ai suivi une approche contrat-first pour générer tout d'abord un document WSDL décrivant un service HelloService comportant une unique opération sayHello censée prendre en paramètre une String name et retourner une String message.
La seconde étape de création du service passe donc par la génération du skeleton serveur. Pour ce faire, j'utilise l'outil wsdl2java d'Axis2. Quatre méthodes de data binding me sont alors proposées :
- ADB (Axis2 Data Binding)
- JAXB (Java Architecture for XML Binding)
- JiBX (Binding XML to Java code)
- XMLBeans
J'ai déjà testé la création d'un service avec l'un de ces types de data binding et celle d'un client avec un type différent et cela ne semble poser aucun problème de compatibilité.
Je me demande donc quels critères peuvent permettre de préférer l'une de ces méthodes de data binding parmi les autres ?
De plus, peut-il y avoir des problèmes de compatibilité client-service en utilisant deux méthodes différentes ?
PS : Dans mon étude, j'ai notamment suivi le tutorial d'Axis2 suivant : http://ws.apache.org/axis2/1_3/quickstartguide.html
EDIT : Je m'aperçois de la simplification apportée par l'option -uw de wsdl2java qui permet d'adapter les paramètres passés au et retournés par le service afin d'obtenir un skeleton plus "naturel" : je passe et récupère directement des String au lieu de SayHello et SayHelloResponse dans le cas de mon service et de son opération sayHello avec les méthodes de data binding ADB et JAXB (c'est plus complexe avec XMLBeans), d'où ces nouvelles questions :
- pourquoi dois-je utiliser par défaut ces classes SayHello et SayHelloResponse générées par l'outil wsdl2java alors que mon service ne traite pourtant que des String ?
- y a-t-il un inconvénient à l'utilisation de cette option -uw qui simplifie le service ?
EDIT 2 : La génération du code java avec JiBX sans l'option -uw nécessite d'utiliser un fichier XML de mapping avec l'option -Ebindingfile. Ce fichier est généralement nommé binding.xml.
EDIT 3 : JAXB et XMLBeans ne supportent pas l'option -uw : les codes java générés avec cette option comportent des erreurs (que l'on peut néanmoins corriger à la main)...
NB : Mon service avec ADB sans unwrapping :
Mon service avec ADB avec unwrapping :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package serviceadb; import localhost.helloservice.SayHello; import localhost.helloservice.SayHelloResponse; public class HelloServiceSkeleton implements HelloServiceSkeletonInterface{ public SayHelloResponse sayHello(SayHello sayHello) { SayHelloResponse sayHelloResponse = new SayHelloResponse(); String message = "Hello " + sayHello.getName() + " !"; sayHelloResponse.setMessage(message); return sayHelloResponse; } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 package serviceadbuw; public class HelloServiceSkeleton implements HelloServiceSkeletonInterface { public String sayHello(String name) { String message = "Hello " + name + " !"; return message; } }
Partager