Nous utilisons JAXB pour gérer notre validation wsdl. Dans le wsdl, nous avons une énumération comme ceci:Comment pouvez-vous gérer les types enum invalides en utilisant JAXB?
<xs:simpleType name="myEnum">
<xs:annotation>
<xs:documentation>The enums which matter.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="MYENUM_1">
<xs:annotation>
<xs:documentation>MYENUM_1 is the first enum.</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="MYENUM_2">
<xs:annotation>
<xs:documentation>MYENUM_2 is the second enum.</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
Si on passe dans une chaîne non valide comme ENUM par exemple, MYENUM_7, la valeur est définie sur null, au lieu de lancer une erreur comme nous attendre. Creuser dans le code, on trouve les éléments suivants de RuntimeEnumLeafInfoImpl.java:
package com.sun.xml.bind.v2.model.impl;
//...
public T parse(CharSequence lexical) throws AccessorException, SAXException {
// TODO: error handling
B b = baseXducer.parse(lexical);
if(b==null) {
return null;
}
return parseMap.get(b);
}
Il est clair de constater que la parseMap est notre liste des énumérations, mais si la clé de la carte, dans ce cas, la valeur de b , n'est pas dans la carte, il retourne juste null. Nous aimerions le lancer et l'exception de quelque sorte si b n'est pas dans parseMap.
À moins de régler cela et de recompiler notre propre JAXB, y a-t-il un autre moyen de résoudre ce problème?
EDIT: pour la clarification
Nous utilisons JAXB 2.1.9, et nous voulons unmarshall les données et valider. Il est certainement possible que j'ai oublié quelque chose dans la documentation sur la validation.
Il est expliqué dans JavaDocs pour la classe Unmarshaller dans la section "Validation et bien-former". – jarnbjo
Ajouter le lien: https://jaxb.dev.java.net/nonav/jaxb20-pfd/api/javax/xml/bind/Unmarshaller.html – grieve