2009-06-10 13 views
17

Estoy usando JAXB para separar un archivo XML en un objeto Java: material estándar. Una vez que JAXB haya completado esto, me gustaría que se llame un método al objeto recién creado.¿Cómo puedo hacer que JAXB llame a un método después de que haya completado la eliminación de un archivo XML en un objeto?

¿Hay un mecanismo para hacer esto? Prefiero que el objeto, no una entidad externa, haga esto para mantener la construcción en un solo lugar.

Gracias.

+0

No entiendo, ¿desea que se llame un método después del proceso de desasignación automáticamente? –

+0

Sí; exactamente. Algo así como JUnit @BeforeClass donde se llama un método después de que se llama a la construcción y los mutadores. – Elliot

Respuesta

7

Para ser capaz de ejecutar código después de unmarshalling tuvo lugar, necesita un Unmarshaller-Listener

Sin embargo, no estoy seguro, si el oyente se invoca después de que las propiedades se establecen o antes.

NOTA: El oyente está disponible desde JAXB- 2.0 (JDK-)

+0

Ivan, vuelve a leer la pregunta. Quiero que se ejecute algún código después de que se haya llamado al constructor y a los mutadores. – Elliot

+0

He modificado mi pregunta –

+0

Gracias, Ivan. No había encontrado una referencia a Unmarshaller.Listener antes, gracias por la respuesta. – Elliot

12

Además de la Unmarshaller.Listener puede agregar los siguientes métodos para sus propios clases del modelo de dominio.

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

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

+0

Las firmas de método son incorrectas y, por lo tanto, no funcionan. El primer objeto debe ser del tipo "Unmarshaller". – Robert

+0

@Robert: las firmas de método ahora se han corregido. –

26

Puede sencilla agregue el método siguiente a la definición del objeto:

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

Se llamará onc e el objeto actual ha sido completamente deserializado. Consulte también la documentación sobre unmarshalling callbacks

Cuestiones relacionadas