unmarshal tutorial parse generate from español cast bean java xml jaxb append application-restart

tutorial - parse xml java jaxb



Java JAXB-Escritura de archivos XML con lógica de reinicio (2)

Estoy creando un archivo XML muy grande (700mb +) que procesa grandes cantidades de datos por lotes. El programa sirve como una interfaz entre una base de datos sybase extremadamente grande y una aplicación. Actualmente tengo el esquema xsd vinculado a las clases. Necesito una forma de poder escribir el XML con la lógica de reinicio en mente.

IE es capaz de saber dónde lo dejé. O en otras palabras, si el programa falla, necesito poder ver lo que fue la última vez que escribí en el archivo XML para que pueda reanudar donde lo dejé. Aquí hay un ejemplo.

<root> <WorkSet> <Work> <Customer> <Work> <Customer> <WorkSet> <Work> ..... <root>

Supongamos que el programa falla después de escribir un nodo de escritura de ''trabajo'' o ''conjunto de trabajo''. ¿Hay alguna manera de retomar el procesamiento donde lo dejé? Estoy intentando evitar volver a leer el archivo XML en la memoria debido al tamaño de corte del archivo XML (Digamos que termina 500 MB de XML y falla).

Gracias por la ayuda.


No creo que JAXB sea la herramienta adecuada para este trabajo, pero ...

Podría escribir una implementación personalizada de Marshaller que realice un seguimiento de los objetos que se han ordenado y utilice el modo de fragmentos para escribir objetos individuales.


Si puede dividir sus datos en elementos WorkSet independientes, puede escribirlos de uno en uno con el modo de fragmentos de JAXB (cuando JAXB no escribe los encabezados). Más tarde, simplemente concatenar los archivos y agregar la declaración XML faltante, abriendo las etiquetas de cierre.

Es posible que tenga que modificar sus clases generadas para esto. Me refiero a agregar @XmlRootElement a la clase Java de WorkSet. Si un WorkSet todavía es grande para un paso, también puede hacerlo con Work, pero debe generar de alguna manera las etiquetas que faltan.