2009-06-10 12 views
17

J'utilise JAXB pour unmarshall un fichier XML dans un objet Java - standard. Une fois que JAXB a terminé ceci, j'aimerais qu'une méthode soit appelée sur l'objet nouvellement créé.Comment puis-je appeler une méthode JAXB après avoir terminé unmarshalling un fichier XML dans un objet?

Existe-t-il un mécanisme pour cela? Je préférerais que l'objet, pas une entité externe, le fasse pour garder la construction au même endroit.

Merci.

+0

Je ne comprends pas, vous voulez qu'une méthode soit appelée automatiquement après le processus unmarshalling? –

+0

Oui; exactement. Quelque chose comme @BeforeClass JUnit où une méthode est appelée après la construction et les mutateurs sont appelés. – Elliot

Répondre

7

Pour être en mesure d'exécuter le code après unmarshalling a eu lieu, vous avez besoin d'un Unmarshaller-Listener

Cependant, je ne suis pas sûr, si l'auditeur est invoqué après les propriétés sont définies ou avant.

REMARQUE: L'auditeur est disponible depuis JAXB- 2.0 (JDK-)

+0

Ivan, s'il vous plaît relisez la question. Je veux que du code soit exécuté après que le constructeur et les mutateurs aient été appelés. – Elliot

+0

J'ai modifié ma question –

+0

Merci, Ivan. Je n'avais pas trouvé de référence à Unmarshaller.Listener avant - merci pour la réponse. – Elliot

12

En plus du Unmarshaller.Listener vous pouvez ajouter les méthodes suivantes pour vos classes de modèle de domaine eux-mêmes.

  • public void beforeUnmarshal(Unmarshaller unmarshaller, Object parent)
  • public void afterUnmarshal(Unmarshaller unmarshaller, Object parent)

De: http://java.sun.com/javase/6/docs/api/javax/xml/bind/Unmarshaller.Listener.html

+0

Les signatures de méthode sont erronées et par conséquent, cela ne fonctionne pas. Le premier objet doit être de type "Unmarshaller". – Robert

+0

@Robert - Les signatures de méthode ont maintenant été corrigées. –

26

Vous pouvez simplement ajouter la méthode suivante à votre définition d'objet:

void afterUnmarshal(Unmarshaller u, Object parent) { 
    ... 
} 

Il sera appelé ONC L'objet actuel a été complètement désérialisé. Voir aussi la documentation à propos de unmarshalling callbacks