2008-11-04 15 views
5

Tengo un esquema XML para el que necesitaré crear clases Java. No es un esquema particularmente grande, diría que resultará en alrededor de 20 clases. Estoy tratando de sopesar si utilizar un programa de enlace automático (como el que se proporciona en JAXB o JiBX) o si escribir manualmente mis propias clases y usar algo como XStream para ordenar/desasignar.Java Binding Vs Definición manual de clases

¿Cuáles son las ventajas/desventajas de escribir sus propias clases en lugar de utilizar un programa vinculante?

Además, uno uso un programa vinculante, ¿estoy ligado a eso para siempre? Por ejemplo, si uso el compilador de enlaces de JAXB para crear las clases, ¿tengo que usar JAXB para todas las clasificaciones/clasificaciones?

p.s. He visto a las siguientes preguntas sobre la unión de XML/serialización, que eran útiles, pero no respondió a mi pregunta totalmente: xml-serialization-in-java y java-xml-binding

Respuesta

13

No creo que hay una respuesta definitiva a su pregunta. Pero puedo darte algunos consejos ganados con esfuerzo. Aquí hay algunas cosas a tener en cuenta:

  1. Es mucho tiempo para escribir código de clasificación y unmarhsalling, especialmente la primera vez.

  2. Tendrás que pasar bastante tiempo aprendiendo los matices de tu biblioteca DOM (Xerces o su equivalente).

  3. Hay mucha duplicación por lo que eventualmente se verá obligado a escribir algunas clases de ayuda.

  4. Necesitará muchas pruebas de unidad para asegurarse de haber cubierto todas sus bases en el área de elementos y atributos opcionales.

En cuanto a esa lista, es bastante fácil decir "eso es lo que JAXB hace por mí". Habiendo hecho esto durante varios años, diría que JAXB le ahorra bastante tiempo y esfuerzo, especialmente la última versión de JAXB en Java 5/6.

Pero si vas con JAXB hay una lección que hemos aprendido de la manera difícil que me gustaría transmitir:

*** No dejar que el JAXB generado clases se filtran en su aplicación.

Como dijo en su pregunta, esto vincula toda su aplicación a la forma en que lo hace JAXB. Si JAXB tiene que ser reemplazado (hay una serie de razones por las que podrías hacer eso en el futuro), entonces te enfrentarás a una tarea desafiante y dolorosa (confía en mí, lo hemos logrado y nunca nos involucraremos en eso). posición de nuevo).

Ahora siempre ocultamos nuestras clases generadas JAXB detrás de una fachada o una fábrica, asignando desde las clases JAXB a nuestros propios POJO de dominio que tienen el comportamiento requerido. Pensamos en JAXB como lo hacemos en JDBC; JAXB es solo otra fuente de datos, otra forma de obtener datos hacia y desde nuestros POJO de dominio. Los POJO de dominio son la salsa secreta y controlamos cómo están codificados y cómo se usan. JAXB es solo una herramienta para organizar y desasociar.

+0

"Lleva mucho tiempo escribir código de compilación y desmarque, especialmente la primera vez". - Es cierto, y agregaría el corolario "Te equivocarás al menos una vez". –

0

No quiero iniciar una larga e interminable guerra acertada sobre la cuestión, pero desde mi experiencia, si puede usar la herramienta que genera todo el código para usted y no requiere confiabilidad de JAR. El código que se generará será feo pero funcionará hasta que vea claramente la necesidad de elaborar el código escrito a mano.En la mayoría de los casos, no necesitarás hacer eso. Lamento no poder dar una recomendación instantánea sobre qué herramienta usar.