2009-06-10 7 views
17

Ich verwende JAXB, um eine XML-Datei in ein Java-Objekt zu entpacken - Standardkram. Sobald JAXB das abgeschlossen hat, möchte ich, dass eine Methode für das neu erstellte Objekt aufgerufen wird.Wie kann JAXB eine Methode aufrufen, nachdem eine XML-Datei in ein Objekt entpackt wurde?

Gibt es einen Mechanismus, um dies zu tun? Ich würde das Objekt, nicht eine externe Entität bevorzugen, um die Konstruktion an einem Ort zu halten.

Danke.

+0

Ich verstehe nicht, möchten Sie eine Methode nach dem Unmarshalling-Prozess automatisch aufgerufen werden? –

+0

Ja; genau. Etwas wie JUnits @BeforeClass, wo eine Methode aufgerufen wird, nachdem die Konstruktion und Mutatoren aufgerufen wurden. – Elliot

Antwort

7

der Lage sein, Code auszuführen, nachdem unmarshalling stattfand, müssen Sie ein Unmarshaller-Listener

Aber ich bin nicht sicher, ob der Hörer, nachdem die aufgerufen Eigenschaften festgelegt sind oder vor.

HINWEIS: Der Hörer seit JAXB- 2.0 (JDK-) verfügbar ist

+0

Ivan, bitte lesen Sie die Frage noch einmal. Ich möchte etwas Code ausgeführt werden, nachdem der Konstruktor und die Mutatoren aufgerufen wurden. – Elliot

+0

Ich habe meine Frage geändert –

+0

Vielen Dank, Ivan. Ich hatte zuvor noch keinen Hinweis auf einen Unmarshaller.Listener gefunden - danke für die Antwort. – Elliot

12

Neben dem Unmarshaller.Listener können Sie die folgenden Methoden, um Ihre Domain-Modell Klassen selbst hinzufügen.

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

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

+0

Die Methodensignaturen sind falsch und funktionieren daher nicht. Das erste Objekt muss vom Typ "Unmarshaller" sein. – Robert

+0

@Robert - Die Methodensignaturen wurden jetzt korrigiert. –

26

Sie können die folgende Methode, um Ihre Objektdefinition einfach hinzufügen:

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

Es wird onc genannt werden e Das aktuelle Objekt wurde vollständig deserialisiert. Siehe auch die Dokumentation über unmarshalling callbacks