2009-08-13 10 views
6

JAXB funciona bien hasta que tenga que hacer algo como serializar beans para los cuales no puedo modificar la fuente. Si el bean no tiene un constructor predeterminado o si se refiere a objetos que quiero marcar como transitorios, entonces estoy atascado escribiendo un bean separado que puedo anotar y luego copiar manualmente la información del otro bean.JAXB es bueno hasta que tenga que hacer algo complejo. ¿Cuáles son las alternativas?

Por ejemplo, quería serializar objetos de excepción, pero encontré que la única manera de hacerlo era usar un truco que requiriera el uso de clases com.sun. *.

Entonces, ¿qué alternativas hay? ¿Cuál es la siguiente API más popular de serialización xml? Sería bueno poder hacer cosas como:

  • Elija en el tiempo de serialización si incluir ciertos campos en el resultado. (marcando cosas transitorias cuando se ejecuta el serializador).

  • Manejar los bucles en el gráfico de objeto mediante el uso de referencias o algo más que morir.

  • Tal vez anotar un objeto para que en la versión 1 serialice las cosas de una manera y en la versión 2 las serialice en otra. Luego, al serializar, simplemente elijo qué versión del objeto de serializar.

  • Obtenga una forma de generar XSD a partir de anotaciones en un objeto.

Básicamente solo quiero más flexibilidad de la que tengo actualmente con JAXB.

Respuesta

2

Bueno, la respuesta estándar para querer un marco de serialización configurable súper es xstream.

0

XStream es una popular biblioteca de serialización XML que afirma ser capaz de serializar casi cualquier cosa, independientemente de constructores u otros problemas (incluso deserializar campos finales). Darle una oportunidad.

No requiere modificaciones en los objetos. Serializa los campos internos, incluidos los privados y finales. Admite clases no públicas e internas. Las clases no requieren tener un constructor predeterminado.

1

Consulte también JIBX. Es un buen xml < -> mapeador de objetos. Sin embargo, mi experiencia es que si sus objetos tienen una relación algo funky a menudo es más fácil crear un objeto contenedor que oculte esa complejidad y luego mapear ese objeto con JIBX.

2

JAXB es una especificación, por lo que puede elegir entre diferentes implementaciones. EclipseLink JAXB (MOXy) tiene extensiones para lo que están pidiendo:

Externalizada metadatos

útil cuando se trata de clases para las que no se puede anotar la fuente o para aplicar varias asignaciones a un modelo de objetos.

XPath base Mapping

Por cierto mapeo Meet-en-el-medio OXM:

JPA Compatibilidad

incluyendo soporte para relaciones bidireccionales.

Cuestiones relacionadas