J'ai un problème de génération de classe JAXB J'espérais obtenir de l'aide. Voici la partie du XML qui est la source de mon problème ...JAXB: Unmarshalling ne remplit pas toujours certaines classes?
<xs:complexType name="IDType">
<xs:choice minOccurs="0" maxOccurs="2">
<xs:element name="DriversLicense" minOccurs="0" maxOccurs="1" type="an..35" />
<xs:element name="SSN" minOccurs="0" maxOccurs="1" type="an..35" />
<xs:element name="CompanyID" minOccurs="0" maxOccurs="1" type="an..35" />
</xs:choice>
</xs:complexType>
<xs:simpleType name="an..35">
<xs:restriction base="an">
<xs:maxLength value="35" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="an">
<xs:restriction base="xs:string">
<xs:pattern value="[ !-~]*" />
</xs:restriction>
</xs:simpleType>
... maintenant cela va générer JAXBElement
types parce que son choice
avec un maxOccurs > 1
. Je veux éviter ceux-ci, donc je l'ai fait en modifiant le code pour utiliser un élément « wrapper » et déplacer le maxOccurs
jusqu'à une étiquette de la séquence suivante ...
<xs:complexType name="IDType">
<xs:sequence maxOccurs="2">
<xs:element name=Wrapper>
<xs:complexType>
<xs:choice>
<xs:element name="DriversLicense" minOccurs="0" maxOccurs="1" type="an..35" />
<xs:element name="SSN" minOccurs="0" maxOccurs="1" type="an..35" />
<xs:element name="CompanyID" minOccurs="0" maxOccurs="1" type="an..35" />
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="an..35">
<xs:restriction base="an">
<xs:maxLength value="35" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="an">
<xs:restriction base="xs:string">
<xs:pattern value="[ !-~]*" />
</xs:restriction>
</xs:simpleType>
pour générer de classe, ressemble à cela fonctionne great - l'élément JAXB est remplacé par une liste de wrappers comme String
(c'est-à-dire List<IDType.Wrapper<String>
) et compile bien.
Cependant, lorsque je démasque les données XML réelles dans les classes générées, les données de la classe wrapper ne sont pas remplies - et pourtant JAXB ne lance pas d'exception.
Ma question est: Ai-je besoin de changer le schéma d'une manière différente pour que cela fonctionne? Ou y a-t-il quelque chose que je peux ajouter/modifier/supprimer au code généré ou aux annotations?
Merci pour la réponse rapide. Je vous en suis reconnaissant. Oui, j'ai un validateur et c'est là que je l'ai attrapé - comme vous l'avez dit. Cependant, en mode débogage, *** après *** unmarshalling XML qui avait deux instances si le wrapper IDType (c'est-à-dire DriversLicense et SSN dans ce cas), j'ai regardé les classes et j'ai remarqué qu'elles n'étaient vraiment pas peuplées. Ainsi, même si la classe Wrapper a été générée, unmarshalling a échoué quand il ne devrait pas l'être. Avez-vous des idées pourquoi? Des suggestions pour modifier les personnalisations XML ou les liaisons? Merci encore! – user278458