Tengo la siguiente situación:JAXB xsd: incluir y separar paquetes
Hay 2 archivos xsd. El primero define un elemento raíz y varios tipos.
El segundo incluye el primero y amplía uno de los tipos. No no es un tipo de raíz definido en este archivo.
Desde la primera xsd, se genera un modelo en un paquete (a). El segundo esquema debe crear un nuevo paquete (b) para los tipos adicionales , pero reutilizar el paquete generado a. Lo resolví utilizando un archivo de enlace que apunta a los elementos generados previamente (en el paquete a). Hasta ahora esto funciona, pero ...
JAXB genera un ObjectFactory en el paquete A, que contiene un método create para el elemento raíz. Para el segundo esquema, también se crea un ObjectFactory en el paquete B. Y esta clase también tenía el método create para el mismo elemento raíz.
Para poder utilizar todos los tipos, el contexto jaxb se crea utilizando fábricas de objetos múltiples (newInstance(a.ObjectFactory.class, b.ObjectFactory.class)
).
En tiempo de ejecución esto se traduce en el siguiente error:
com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 2 counts of IllegalAnnotationExceptions The element name {http://www.example.org/Scenario/}scenario has more than one mapping
¿Debo generar los paquetes de manera diferente? ¿O hay algo posible utilizando el archivo de enlace para evitar que la fábrica de objetos tenga métodos duplicados?
Gracias por la respuesta. Ya lo cambié para usar la importación en lugar de incluir, de hecho parece ser mejor. Voy a echar un vistazo a la publicación del blog, parece prometedor hasta el momento. – Alexander
Esto resolvió mi problema. Gracias por el enlace, he estado buscando por días. : S – Alexander
usando importar en lugar de include puede haber funcionado para este caso en particular, pero el mismo problema con ObjectFactory que contiene métodos duplicados puede aparecer al usar también importación (si se usan referencias a objetos). Ver: http://stackoverflow.com/questions/5155414/jaxb-multiple-schemas-with-element-reference –