8
votes

Unmarshalling XML à l'objet existant à l'aide de Jaxb

J'ai un XSD généré à partir d'un ensemble de classes Java existantes et actuellement il est actuellement des messages XML dans l'objet comme prévu, cependant, ce que j'aimerais que la capacité de faire est d'où j'ai une instance existante de l'objet avoir la Unmarshaller simplifie simplement les champs contenus dans le message transmis à celui-ci

​​par exemple (pardonnez toutes les erreurs de syntaxe ici, c'est juste à côté de ma tête)

Si j'avais un livre de classe annoté avec de nombreux Champs, Titre, Auteur, Publié, etc. et le XSD généré correspondant, beaucoup des champs définis pour ne pas être obligé de pouvoir être capable si j'ai reçu le XML xxx

Plutôt que de créer simplement une nouvelle instance de livre avec seulement l'ensemble de titre appliquez-la à une instance existante en tant que mise à jour, définissez ainsi la variable de titre sur cette instance.


1 commentaires

Oh oui et j'utilise Jaxb pour le moment pour minimiser le XML


3 Réponses :


5
votes

Jaxb ne peut pas le faire pour vous, non. Cependant, ce que vous pourriez faire est d'utiliser Jaxb pour minimiser votre document XML sur un nouvel objet, puis copiez-la de la propriété du nouvel objet sur votre existant.

Les beansutils de la communication fournissent un mécanisme pour cela, tel que le beanutils.copopoperties méthode. Je ne sais pas si cela fait des copies profondes, cependant.


0 commentaires

0
votes

Vous faites ce travail avec Jaxb, mais vous devez faire la majeure partie du travail vous-même.

Dans votre exemple, vous avez besoin d'une capacité de recherche, comme un registre Singleton des titres pour réserver des objets.

Depuis votre identifiant, le titre, est un élément enfant, rien ne garantit que Jaxb visitera l'élément de titre avant tout autre élément. Le moyen le plus simple autour de cela est de copier des propriétés de l'instance de livre créée par le Memarshaller à votre instance de livre Singleton. Le rappel de est l'endroit idéal pour le faire: xxx

Si vous souhaitez enregistrer des objets hors du document XML à la volée, c'est un peu plus complexe. Dans votre cas, vous voulez probablement quelque chose comme: xxx

qui fonctionnera aussi longtemps que vous n'avez pas de livres imbriqués.


0 commentaires

0
votes

Vous pouvez y parvenir en utilisant un plug-in copaire de Jaxb2 Commons - Copiche + Plugin


0 commentaires