JAXB Ignorer "extra" des éléments de Réponse XML
Je reçois une réponse XML et il ne cesse de changer très fréquemment (nœuds de garder sur l'augmentation ou la réduction). Après chaque mise à jour dans le fichier xml de réponse mon code pauses que mon mappé classe Java ne dispose pas de tous les champs.
Est-il un moyen d'éviter mon code de rupture si des changements se produisent en réponse XML.
Toute aide sera appréciée.
Grâce.
OriginalL'auteur Arpit | 2014-09-02
Vous devez vous connecter pour publier un commentaire.
Pour faire face à des domaines inconnus, vous pouvez ajouter un
List<Object>
propriété annoté@XmlAnyElement(lax=true)
Tous les éléments de l'entrée qui ne correspondent pas à l'explicite les propriétés de la classe seront balayés dans cette liste. Si l'élément est connu pour la
JAXBContext
vous aurez la unmarshalled formulaire (les@XmlRootElement
annoté de la classe ou unJAXBElement<Foo>
), si l'élément n'est pas connu pour le contexte, vous aurez uneorg.w3c.dom.Element
.Plus de détails dans Blaise blog.
Pour les nœuds qui se retiré, vous devez être bien aussi longtemps que vous utilisez les types qui peuvent être null (
Integer
plutôt queint
,Boolean
plutôt queboolean
, etc).OriginalL'auteur Ian Roberts
Utilisation
JAXB.unmarshal()
simplement pour créer des objets Java à partir de XML.Par défaut, il est très libéral.
Citant le javadoc:
Donc ce
JAXB.unmarshal()
n'est-il tente de "transfert", autant de données à partir de XML pour Java que possible, et il ne se soucie pas si il n'y a pas de Java champ pour un XML de l'élément ou de l'attribut, et elle aussi ne se soucient pas si il y a un Java domaine pour lequel il n'existe pas de XML de l'élément ou de l'attribut.Exemple
Essayons de unmarshal le code XML suivant pour un exemple de
java.awt.Point
:Le code Java:
Nous dit
JAXB.unmarshal()
pour analyser unjava.awt.Point
instance. Le XML d'entrée contient un élément<y>
qui peut être mis en correspondance avecPoint.y
donc unint
a été analysée et définie àPoint.y
. Pas de données XML a été trouvé pour lePoint.x
de sorte qu'il n'a pas été touché. Il n'y avait pas de match pour l'attributhi
et l'élément XML<peach>
, de sorte qu'ils n'étaient tout simplement pas utilisé pour quoi que ce soit.Nous avons eu absolument aucun
Exception
ici, et la plupart de ce qui était possible a été analysée et transférés à partir de XML pour Java.OriginalL'auteur icza