2010-04-19 15 views
14

¿Siempre necesita una clase ObjectFactory cuando usa JAXB?¿Siempre necesita una clase ObjectFactory cuando usa JAXB?

Sin ella llego esta excepción:

javax.xml.bind.JAXBException: "com.abc" doesnt contiene ObjectFactory.class o jaxb.index

I gather ObjectFactory puede ser excesivo. Pero dada esta excepción, supongo que lo necesitas ... ¿pero no estás seguro de por qué?

Respuesta

20

, tienes el excepción cuando se utiliza el método JAXBContext.newInstance(String) fábrica, donde se pasa en el nombre del paquete como argumento. Esto hace requieren el ObjectFactory de estar allí, de lo contrario, JAXB no sabe qué clases de procesar.

Si no tiene un ObjectFactory, necesita JAXBContext.newInstance(Class...) en su lugar, pasando en la lista explícita de clases anotadas para agregar al contexto.

+1

siempre tenemos el mismo elemento raíz. Desde la raíz, tenemos una gran jerarquía de elementos de clases/xml. Entonces, ¿podemos hacer 'JAXBContext.newInstance (OurRoot.class)'? ¿O tenemos que pasar una lista de * todas * nuestras clases? –

+2

@Marcus: Generalmente Solo hay que pasar en la clase raíz, sí, a menos que tenga las asociaciones polimórficas en sus anotaciones, en cuyo caso se necesita para pasar de incluirlos también. Los métodos generados en 'ObjectFactory' pueden parecer un poco extraños, y en la mayoría de los casos, no es necesario que los use en absoluto, solo puede crear instancias directamente. Son más útiles para crear contenedores 'JAXBElement'. – skaffman

Cuestiones relacionadas