Как я могу заставить JAXB вызывать метод после того, как он завершил демаршализацию файла XML в объект? - PullRequest
21 голосов
/ 10 июня 2009

Я использую JAXB для демонтажа XML-файла в объект Java - стандартные вещи. Как только JAXB завершит это, я бы хотел, чтобы метод был вызван для вновь созданного объекта.

Есть ли механизм для этого? Я бы предпочел, чтобы объект, а не внешняя сущность, делал это, чтобы сохранить конструкцию в одном месте.

Спасибо.

Ответы [ 3 ]

32 голосов
/ 07 декабря 2010

Вы можете просто добавить следующий метод к определению вашего объекта:

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

Он будет вызван после полной десериализации текущего объекта. См. Также документацию о необратимых обратных вызовах

16 голосов
/ 06 июля 2010

В дополнение к Unmarshaller.Listener вы можете добавить следующие методы к самим классам модели вашего домена.

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

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

7 голосов
/ 21 июня 2009

Чтобы иметь возможность выполнять код после отмены маршалинга, вам нужно Unmarshaller-Listener

Однако я не уверен, вызывается ли слушатель после свойства устанавливаются или ранее.

ПРИМЕЧАНИЕ: Слушатель доступен с версии JAXB- 2.0 (JDK- 6 )

...