Consommation d'un webservice(JAX) retournant un object complexe!! [Résolu]

Signaler
Messages postés
33
Date d'inscription
vendredi 26 mars 2010
Statut
Membre
Dernière intervention
26 juillet 2010
-
Messages postés
380
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
13 août 2011
-
bonjour et merci d'avance pour tous ceux qui vont consacré un petit moment à mon post.
je travaille sur un projet client-serveur, tel que le serveur fournit des web services(développés en java, Jax_WS) et le client qui consomme ces web services est developpé en c#(visual studio 2008), avant de faire mon client c# , j'avais développé un client java qui consommait mes web services et ça fonctionnait super bien, avec mon client c# ça fonctionne seulement quand je fait appel à une méthode d'un web service qui retourne un type simple (int, String,etc ...) par contre si mon web service retourne un type complexe( List<MyClass> , MyClass est une classe simple contient deux champs int id et String name. c'est une classe du package du serveur, mon web service remplie ses champs et envois une liste de cette classe), le problème c'est que dans mon client c# ça me signale une erreur de compilation(le type ou le nom de l'espace de nom 'MyClass' est introuvable).
pour plus de précision :j'ai intégré mon web service en l'ajoutant tant qu'une référence web j'ai pas utilisé wsdl.exe est ce que ca sera à cause de ça que mon client ne reconnait pas la classe MyClass, pourtant ça marchait avec le client java( le client C# est une obligation dans le cadre de mon projet est pas u choix personnel )
à l'attente de votre aide
merci a touuuuuuuus.
si on ne fait ce qu'on aime, il faut qu'on aime ce qu'on fait!

11 réponses

Messages postés
33
Date d'inscription
vendredi 26 mars 2010
Statut
Membre
Dernière intervention
26 juillet 2010

bonjour, merci bcp pr la solution , ça m'a aidé à résoudre mon problème et la j'ai un autre problème lol(que des problème ), en gros mon web service retourne une collection de description de base de donnée voila les bout de code en java de mon web service:
**************************
List<DocBaseDesc> list = new ArrayList<DocbaseDesc>();
//DocbaseDesc est une classe simple contient 2 champs String id et //String description
public List<DocbaseDesc> getListdesc(){
......traitement....
return list
}
***************************************
au niveau de mon client c# je fais appel a mon webservice:
*********************************
// Instancier mon web service: mywb
ServerListdesc.getlistClient mywb = new ServerListdesc.getlistClient();
//j'accéde a mon object docbaseDesc par la solution que tu ma //proposée
List<ServerListdesc.docbaseDesc> listDocBase = new List<ServerListdesc.docbaseDesc>();
//et au niveau de cet appel ça me génére une erreur

listDocBase = mywb.getListdesc();
//: ErreurImpossible de convertir implicitement le type ServerListdesc.docbaseDesc[]' en 'System.Collections.Generic.List<ServerListdesc.docbaseDesc>'
de l'aide SVP


si on ne fait ce qu'on aime, il faut qu'on aime ce qu'on fait!
Messages postés
380
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
13 août 2011
7
parce que ton web service fait des add sur l'object sans le vider au debut de la requette ou tu dois le remplir :)
Messages postés
380
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
13 août 2011
7
salut tu a essayé dans ton client c# de declarer ta List<MyClass> en List<webservice.MyClass> ?
Messages postés
380
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
13 août 2011
7
salut ton erreur n'est pas plutot dans la fonction getListdesc ???

quel est le type de 'list' dans cette fonction ?? au moment de la declaration ??

si cet un array , essais de lui faire un return list.ToList();
Messages postés
33
Date d'inscription
vendredi 26 mars 2010
Statut
Membre
Dernière intervention
26 juillet 2010

tout d'abord merci bcp pour ton aide, mais c bon g résolu le problème de la manière suivante:
ServerListdesc.docbaseDesc[] myarray = mywb.getListdesc();
en fait la méthode getListdesc() retourne une list de type docbaseDesc en java mais si je fais pareil en c#(Lis<ServerListdesc.docbaseDesc> myarray = getListdesc()) ça me génère l'erreur de tte à l'heure(problème de conversion de type).
le problème mnt (de nouveau un probléme)c 'est que à chaque fois qd j'affiche les résultats de myarray, ça m'affiche les résultats précedents.
plus précisément, ma méthode getListdesc() devrait me retourner 3 valeurs, le problème c que la 1ere fois ma bien affiché les 3 valeurs la 2éme fois 2 fois les 3 valeurs (6 valeurs), la 3éme fois 9 valeurs ainsi de suite ....
le myarray ne se vide pas et garde les anciens valeurs.
voila mon code:
************************
ServerListdesc.docbaseDesc[] myarray = new ServerListdesc.docbaseDesc[0];
myarray = myweb.getListdesc();
int nbDoc = myarray.Count();


for (int i = 0; i < nbDoc; i++)
{
String name = mayarray[i].name;
String desc = mayarray[i].description;
System.Console.WriteLine("Docbase " + i + ": " + name + " / " + desc);
}
j'ai essayé de vider mayarray de cette façon
int j = 0;
while (resultDocbasesList[j] != null)
{
mayarray[j]=null;
//ou meme mayarray[j]= 0;
}

les deux façons me génèrent des erreurs de compilations
tu aurais une idée pr résoudre ce problème.
et merci bccccccccccp

si on ne fait ce qu'on aime, il faut qu'on aime ce qu'on fait!
Messages postés
380
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
13 août 2011
7
resultDocbasesList n'est jamais declaré ou je ne le vois pas !?

[j] n'est jamais incrementé et aucune des lignes dans tonwhile ne sera appelé car le test du while renverra false si le premier elment n'et pas null

faut faire un do while la

do
{
    mayarray[j++]=null;
}
while (j < mayarray.Lenght && maarray[j] != null);


la je test la valeur de j pour eviter les out of range exeception
Messages postés
33
Date d'inscription
vendredi 26 mars 2010
Statut
Membre
Dernière intervention
26 juillet 2010

malgré le test à la fin du while ca me génère une out of exception
"l'index se trouve en dehors des limites du tableau
si on ne fait ce qu'on aime, il faut qu'on aime ce qu'on fait!
Messages postés
380
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
13 août 2011
7
c que mayarray n'a aucun element

if(marray.Length > 0)
{

do
{
    maarray[j++]=null;
}
while (j < maarray.Length && maarray[j] != null);


}
Messages postés
33
Date d'inscription
vendredi 26 mars 2010
Statut
Membre
Dernière intervention
26 juillet 2010

En fait l'erreur et bcp plus grave que ça, le out of exception je l'ai plus (merci merci)mais j'ai tjr plus de valeurs de ce qu'il faut .en fait jai fait qlq tests :
tout d'abord j'affiche la taille de myarray une fois je le déclare et ça donne length=0 donc c inutile de le vider et juste apprés j'appelle ma méthode myarray = myweb.getListdesc();
et je ré affiche de nouveau length de myarray et la ca donne 159
au lieu de 3 ( et 159 est le nombre de fois ke jai appelé ma méthode )
je comprends pas prkoi mon web service garde les anciennes valeurs (en dirais l'historique) pourtant son traitement est simple ( j'initialise 3 fois name et desc par des Chaine de caractéres et je les additionne dans une list et je retourne la liste)
en java ça fonctionne très bien, mais le c# me fait bien galéré

si on ne fait ce qu'on aime, il faut qu'on aime ce qu'on fait!
Messages postés
33
Date d'inscription
vendredi 26 mars 2010
Statut
Membre
Dernière intervention
26 juillet 2010

Cooooooooool, c finit le cauchemar ça fonctionne
il faillait juste que je déclare ma list retournée par mon web service dans le corps de la méthode et pas avant et comme ca justement il part à chaque d'une nouvelle liste bien vide.
merci bcp Yohan tu m' as apporté une énorme aide.
je te remercie infiniment

si on ne fait ce qu'on aime, il faut qu'on aime ce qu'on fait!
Messages postés
380
Date d'inscription
samedi 22 janvier 2005
Statut
Membre
Dernière intervention
13 août 2011
7
de rien :)