JAXB de Triage avec des champs null
C'est une question assez simple demande, mais je n'ai tout simplement pas trouver un moyen de le faire.
J'essaie de configurer un rôle dans JAXB qui dit que chaque fois qu'un champ nul est rencontré, au lieu de l'ignorer dans la sortie, le régler à une valeur vide. Ainsi, pour la classe :
@XMLRootElement
Class Foo {
Integer num;
Date date;
….
}
Lorsque cela a été rassemblés dans le fichier XML si le champ date est nulle, ma sortie n'a pas qui élément en elle. Ce que je veux faire est d'inclure tous les champs de la sortie; et si ils sont nuls, les remplacer à - dire un vide. Si la sortie doit être :
<foo>
<num>123</num>
<date></date>
</foo>
Merci,
Jalpesh.
- Grande question et de la réponse! J'ai rencontré le même problème, et il a été d'une grande aide.
Vous devez vous connecter pour publier un commentaire.
Merci les gars pour vos réponses.
Chris Dail - j'ai essayé votre approche, et il n'a pas vraiment faire ce que je voulais. JAXB était encore ignorant mes valeurs nulles, en dépit de définir une valeur par défaut pour mes champs.
Je l'ai fait tomber sur la réponse, après que quelqu'un dans le Maillot des forums m'a montré à la section documentation 2.2.12.8 Aucune Valeur.
Fondamentalement, tout ce que j'avais à faire était d'ajouter ce qui suit à mon champs :
Une fois j'ai ajouté que, JAXB présenteraient ces champs lors de la sérialisation en XML comme ceci:
Mais, mais, mais...une chaîne vide n'est pas une représentation lexicale pour une date, de sorte que vous ne pouvez pas le faire. c'est à dire, si vous avez généré un document XML avec une valeur vide pour un champ de date, il ne valide pas correctement.
En d'autres termes, si votre
date
élément a unminOccurs
de 1 ou plus, et pasnillable
, alors vous devez absolument avoir (1 ou plus) des dates, ce qui ne peut pas être null (ou blancs, ou d'autres non-valeurs).Comme indiqué dans l'autre réponse est invalide car elle n'est pas une date valide. J'ai eu un problème similaire où je voulais poignée (de même que ) spécialement. Puisque vous ne pouvez pas utiliser les valeurs null, vous pouvez utiliser la valeur par défaut mécanisme de JAXB. La suite sera, par défaut, la valeur si aucun n'est spécifié. Vous pouvez à l'aide de code de détecter cette date spéciale et de gérer ce cas d'exception.
Il est donc possible d'détecté et vide valeur de date, mais vous ne pouvez pas utiliser la valeur null pour le faire.
Dans MOXy u pouvez spécifier comment la jsonProvider doit faire son travail pour JAXB.
Donc, quand on fait de JAX-RS, ajoutez le code suivant dans votre classe dérivée de l'Application
J'ai utilisé ce code sur Tomcat 7 avec de bons résultats. (eclipselink 2.4.1)
Sur Glassfish 3.1.2 et a ÉTÉ de 8,5 cependant, newMoxyJsonProvider() n'est pas nécessaire, mais alors le JAXB fournisseur de se configure par le serveur.
Dans le cas de Glassfish, qui est livré avec MOXy, j'ai connu les mêmes problèmes avec des valeurs null.
Ne cochez pas encore, mais imagine que la réponse est dans la configuration de JAXB à l'application, au niveau du serveur, si possible à tous.
Essayez ceci:
avec