Bonjour,
Mon titre est mauvais, mais faut bien en trouver un...

J'ai des EJB3 annotés pour en faire des WS. JBoss 4.2 me génère la WSDL, XFire 1.2.6 me génère le code client.

Voici mon EJB3 :
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
16
17
18
19
@WebService(targetNamespace = WSConstants.TARGET_NAMESPACE)
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
public interface IdentificationManager {
 
	/**
         * Connecte un User
         * @param email
         * @param pwd 
         * @param initializeUser
         * @return le User connecté
         * @throws LoginException Si la connexion a échouée
         */
	@WebMethod
	@WebResult(targetNamespace=WSConstants.TARGET_NAMESPACE)
	public User login(
			@WebParam(name="email", targetNamespace = WSConstants.TARGET_NAMESPACE) String email, 
			@WebParam(name="pwd", targetNamespace = WSConstants.TARGET_NAMESPACE) String pwd,
			@WebParam(name="initializeUser", targetNamespace = WSConstants.TARGET_NAMESPACE) boolean initializeUser) 
		throws ServerException;
L'appel se fait correctement, la méthode s'exécute bien côté serveur et renvoie bien l'objet souhaité.


Mais côté client, je ne récupère pas l'objet souhaité.
Si je fais l'appel suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Service serviceModel = new AnnotationServiceFactory().create(IdentificationManager.class);
IdentificationManager identification = (IdentificationManager)new XFireProxyFactory().create(serviceModel, "http://127.0.0.1:8091/xxxx/IdentificationManagerBean?wsdl");
user = identification.login(customer.getEmail(), customer.getPassword(), true);
Je récupère un objet User (du type généré par XFire), qui n'est pas null, mais dont tous les attributs eux le sont!

Et là, j'y vois rien. Encore l'objet serait null, mais là...

J'ai tenté de faire l'appel autrement :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
IdentificationManager identification = new IdentificationManagerBeanServiceClient().getIdentificationManagerBeanPort();
user = identification.login(customer.getEmail(), customer.getPassword(), true);
Et là, j'ai l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
javax.xml.bind.JAXBException: com.travelsocial.ws.model.User is not known to this context
J'avais déjà eu cette erreur auparavant, c'est pour ça que j'avais changé ma façon de faire l'appel (je n'avais pas trouvé mieux). Mais là, je me dis que le problème est peut-être le même : mon type User n'est pas connu du contexte, donc il ne me l'initialise pas avec les données qu'il reçoit.... ?

Merci de votre aide.

JM