2009-06-10 8 views
17

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

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

Спасибо.

+0

Я не понимаю, вы хотите, чтобы метод был вызван после процесса unmarshalling автоматически? –

+0

Да; в точку. Вызывается что-то вроде @BeforeClass от JUnit, где вызывается метод после построения и мутаторы. – Elliot

ответ

7

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

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

Примечание: Слушатель доступен с JAXB- 2,0 (JDK-)

+0

Иван, пожалуйста, перечитайте вопрос. Я хочу, чтобы какой-то код выполнялся после того, как был вызван конструктор, и были вызваны мутаторы. – Elliot

+0

Я изменил свой вопрос –

+0

Спасибо, Иван. Раньше я не нашел ссылку на Unmarshaller.Listener - спасибо за ответ. – Elliot

12

В дополнение к 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

+0

Сигнатуры метода неправильны и поэтому не работают. Первый объект должен иметь тип «Unmarshaller». – Robert

+0

@Robert - Подписи методов теперь исправлены. –

26

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

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

Он будет называться ОНК e текущий объект был полностью десериализован. См. Также документацию о unmarshalling callbacks