En supposant que j'ai un schéma qui décrit une classe d'éléments racine Root
qui contient un List<Entry>
où la classe Entry
a un nom de champ obligatoire.Personnalisation du traitement des erreurs du processus unmarshall de JAXB
Voici à quoi il ressemble dans le code:
@XmlRootElement
class Root{
@XmlElement(name="entry")
public List<Entry> entries = Lists.newArrayList();
}
@XmlRootElement
class Entry{
@XmlElement(name="name",required=true)
public String name;
}
Si je fournir le code XML suivant pour unmarshalling:
<root>
<entry>
<name>ekeren</name>
</entry>
<entry>
</entry>
</root>
J'ai un problème parce que la deuxième entrée ne contient pas de nom. Donc, unmarshall produit null
.
Y at-il un moyen de personnaliser JAXB à unmarshall un objet Root
qui ne contiendra que la "bonne" entrée?
c'est une bonne idée, merci. Bien sûr, je devrai définir le eventHandler comme tolérant pour l'erreur "field is required" mais cela ne devrait pas poser de problème. Je me demande s'il y a une solution différente, j'essaie de rendre l'utilisateur de mon système (j'écris une lib pour mon groupe qui traite de la configuration) pour pouvoir facilement régler cette fonction. Je peux le faire avec l'annotation et une introspection de classe pour voir tous les champs qui doivent être testés pour le nom requis ... à l'intérieur de afterUnmarshal (...). Je vais garder cela sans réponse peut-être qu'il y a quelqu'un avec une réponse plus appropriée pour ce dont j'ai besoin. – ekeren
@ekeren voir mon édition, j'espère que cela aide. à votre santé – sfussenegger