Bonjour,
je viens vous exposer un problème que je rencontre dans mes balbutiements en WebServices.
Je dois faire un client d'une WSDL (que je ne peux pas modifier). J'utilise alors la commande wsimport pour générer mes classes.
Cependant dans le code généré, je me retrouve avec des List<JAXBElement<?>> getDatesAndJournalsAndTexts() qui se trouve être la traduction d'un <xs:choice> qui a à peu de chose près cette tête.
1 2 3 4 5 6 7 8 9
| <xs:complexType name="critiqueType">
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="date" type="xs:dateTime"/>
<xs:element name="journal" type="xs:string"/>
<xs:element name="text" type="xs:string"/>
</xs:choice>
</xs:sequence>
</xs:complexType> |
En fait, je m'attendais à avoir une classe contenant 3 attributs (date, journal et text) qui pouvait être null si non présent.
Plus loin, j'ai un cas similaire qui est aussi traduit de la même façon.
En investiguant un peu, je suis tombé sur ce lien qui apparemment pouvait résoudre mon problème...
https://jaxb.dev.java.net/2.1.9/docs...ns.html#simple
j'ai donc créer un fichier de conf xjb qui a maintenant cette tête:
1 2 3 4 5 6 7 8 9 10
| <jxb:bindings version="2.0"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
>
<jxb:globalBindings generateElementProperty="false" >
<jxb:javaType name="java.lang.Integer" xmlType="xs:integer" />
<xjc:simple />
</jxb:globalBindings>
</jxb:bindings> |
Et j'ai bien sûr indiqué dans la commande wsimport la prise en compte de ce fichier (i.e.
wsimport -b ./ma config.xjb -s WS http://mawsdl.wsdl
)
Mais l'effet n'est pas celui escompté puisque j'ai toujours cette List<JAXBElement<?>> ou pire une List<Object> pour mon deuxième cas (pire car je ne peux même plus savoir à quel champ se rapporte la valeur)
Une des solutions barbares seraient de créer des classes utilitaires pour manipuler aisément les JAXBElement mais elle n'est pas très élégante...
Avez-vous une idée pour que je puisse traduire ce "choice" d'une façon plus naturelle que cette List<JAXBElement> ?
Je vous remercie d'avance
Bonne semaine à tous
Partager