2008-09-15 14 views

Respuesta

8

La manera más fácil aquí es serializar el gráfico del objeto. Java 1.4 tiene soporte integrado para la serialización como XML.

Una solución que he utilizado con éxito es xstream (http://x-stream.github.io/)- es una pequeña biblioteca que le permitirá fácilmente que para serializar y deserializar hacia y desde XML

La desventaja es que puede muy limitada definir el XML resultante;. El cual podría no ser lo necesite en su caso

+0

Incluso ahora, en 2013, xstream todavía funciona perfectamente. – Andrew

4

XStream por la gente en Thoughtworks tiene una API simple e incluso trata con cosas como referencias duplicadas y circulares. Parece estar activamente desarrollado y está bien documentado.

http://x-stream.github.io/

-1

Si está realmente interesado sólo en la serialización de los objetos a un archivo y luego deserializar más tarde, entonces es posible que echa un vistazo a YAML en lugar de XML. Es mucho más fácil trabajar con YAML que con XML y los archivos de salida son legibles por humanos (lo que puede o no ser un requisito). Consulte yaml.org para obtener más información. He usado JYAML con éxito en un proyecto reciente.

1

Si necesita controlar la estructura del XML, XStream es una buena opción. Puede usar anotaciones para definir con precisión la estructura/mapeo del XML y sus objetos.

3

Utilice java.beans.XMLEncoder. Su API es muy simple (de hecho un poco demasiado simple, sería bueno conectarlo a un SAX ContentHandler), pero funciona en muchos gráficos al instante, y es fácil crear su propio delegado de persistencia para cualquier las clases de pelota que puede encontrar.

  • La sintaxis utilizada por XMLDecoder permite que permite invocar cualquier método de instancia, o estáticos, incluyendo constructores, por lo que es extremadamente flexible.
  • Otros codificadores llaman elementos y atributos después de la clase y nombres de campo, por lo que no hay un esquema fijo para el resultado. El XML de XMLEncoder sigue una DTD simple y puede ser fácilmente validado o transformado, incluso cuando nunca ha visto los tipos que utiliza.
  • Puede asignar objetos con un identificador y hacer referencia a ellos en todo el gráfico.
  • Puede consultar las constantes definidas en clases o interfaces.

Y está incorporado en Java SE, por lo que no necesita enviar una biblioteca adicional.

1

JAX-B es parte de las API estándar y realmente fácil de usar.

1

Sería el segundo (o tercero) XStream. Lee y escribe XML sin necesidad de ninguna configuración de enlace especial o colocando muchas sintaxis extrañas en el XML.

2

Si necesita control sobre el XML que se genera, recomiendo echar un vistazo a Betwixt (http://commons.apache.org/betwixt/) - agrega mucha funcionalidad al digestor de Apache (Digester es bueno para construir gráficos de objeto de XML, pero no bueno para generarlos).

Si realmente no te importa el XML que se genera (solo que se puede deserializar en el futuro), entonces las clases XMLEncoder/Decoder integradas en Java o bien, siempre y cuando los objetos que estás serializando sigan la especificación JavaBean. El área más grande en la que he tenido problemas con la solución XMLEncoder/Decoder es si tienes un bean que devuelve una lista inmutable para una de sus propiedades: el codificador no maneja esa situación muy bien.

2

Aunque XStream y JAXB pueden serializar algunos gráficos de objetos con éxito, no pueden manejar gráficos muy complejos. La solución más poderosa para gráficos complejos grandes es http://simple.sourceforge.net/ que puede manejar cualquier gráfico. Además, es rápido y fácil de usar sin ninguna dependencia.

Cuestiones relacionadas