Bonjour,
Je travaille actuellement sur un Web Service pour lequel j'ai commencé par écrire le WSDL et je suis maintenant dans la phase de développement du code Java. J'ai pour cela utilisé WSDL2Java pour faire la génération du squelette côté serveur, mais je constate une erreur dans les classe métiers générées (à partir des types complexes définis dans mon WSDL). je précise qu'après avoir testé la génération côté client j'aboutis à la même erreur sur les classes métiers. Je retrouve aussi cette erreur à partir d'un autre WSDL (qui n'est pas de moi) en génération côté client. Mon WSDL est (je ne mets que la partie pertinente, c'est-à-dire la définition des types complexes qui m'intéressent)
Je m'attends donc à ce que deux classes soient générées, UserDataContainer et DataField, seulement il n'en est rien, seule DataField est générée. Et là où je m'attends à voir dans le code le nom de classe UserDataContainer, je trouve à la place DataField[].
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 <xsd:complexType name="UserDataContainer"> <xsd:sequence> <xsd:element name="field" type="tns2:DataField" maxOccurs="unbounded" minOccurs="0" /> </xsd:sequence> <xsd:attribute name="iDType" type="xsd:string" use="required" /> <xsd:attribute name="iDValue" type="xsd:string" use="required" /> </xsd:complexType> <xsd:complexType name="DataField"> <xsd:attribute name="fieldName" type="xsd:string" use="required" /> <xsd:attribute name="fieldValue" type="xsd:string" use="required" /> </xsd:complexType>
Après avoir regardé plus en détail, il semblerait que WSDL2Java n'aime pas cumuler les <sequence>...</sequence> et les <attribute .../> dans un même type complexe, sauf quand il y a plusieurs <element .../> entre les balises <sequence> et </sequence>, puisqu'avec le type complexe MessagePattern, défini dans le même WSDL par :
je récupère bien une classe qui compte aussi bien mes listes de types DataField[] que mes attributs...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <xsd:complexType name="MessagePattern"> <xsd:sequence> <xsd:element name="messageFields" type="tns2:DataField" maxOccurs="unbounded" minOccurs="1" /> <xsd:element name="attachedFiles" type="tns2:DataField" maxOccurs="unbounded" minOccurs="0" /> </xsd:sequence> <xsd:attribute name="iD" type="xsd:string" use="required" /> <xsd:attribute name="languageCode" type="xsd:string" use="required" /> <xsd:attribute name="mediaCode" type="xsd:string" use="required" /> </xsd:complexType>
Si quelqu'un connaît le problème, je serais intéressé de connaître la raison (s'il y en a une) et la façon de le résoudre (au pire ça se fera à la main dans le code Java).
Merci.
Partager