Bonjour dans la librairie que j'utilise pour invoquer un service web j'obtiens un résultat étrange au niveau de la sérialisation des parametres
si je prend la classe Client :un client est quelque chose de la forme
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Class Client { String nom; String prenom; Date debut; Date fin; } Class Date {...}
serialize_val me donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 monClient ::= { nom ::= 'Terrien'; prenom ::= 'Jean-Yves'; debut ::= { jour ::= 20061129 ... } fin ::= { jour ::= 20061231 ... } }
c'est ce que donne en standard la librairie lorsqu'on n'a pas de WSDL
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <Client> <nom xsi:type="xsd:string">Terrien</test> <prenom xsi:type="xsd:string">Jean-Yves</test> <Date> <jour xsi:type="xsd:int">20061129</test> </Date> <Date> <jour xsi:type="xsd:int">20061231</test> </Date> </Client>
Ce qui est étrange la dedans c'est que j'ai perdu le nom de mon parametre monClient. J'ai bien un xml qui repésente un client mais je ne sais pas que c'est monClient
pire dans le XML j'ai perdu les attributs debut et fin j'ai deux date mais pas le moyen de savoir à quel attribut les affecter.
pire suivant ce qui c'est passé avant la serialisation la date de debut de fin ne sont pas obligatoirement dans le même ordre.
le même client peut se retrouver encodé comme suit :
du coup impossible de reconstituer mon client.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <Client> <nom xsi:type="xsd:string">Terrien</test> <Date> <jour xsi:type="xsd:int">20061231</test> </Date> <prenom xsi:type="xsd:string">Jean-Yves</test> <Date> <jour xsi:type="xsd:int">20061129</test> </Date> </Client>
Je n'avais jamais regardé le XML de SOAP de si près et je me demande si c'est un bug de ma librairie ou si c'est ainsi que le défini le protocole.
Comment doit être encodé une classe lorsque aucun WSDL n'a été défini ?
La solution est de définir un WSDL.
vu que pour le moment je défini et le service et le client je passe par des Tableaux associatifs. mais ça n'enlève pas le problème car si un jour je dois invoquer un service qui n'est pas défini par mes soins, n'a pas de WSDL et attend un objet en parametre j'ai ne vois pas comment j'aurais la garantie que le résultat sera corectement interprété.
Merci de votre aide
A+JYT
Partager