2011-04-25 8 views
9

Estoy usando JAXB 2.2.2 para analizar una secuencia XML-REST simple. Este es el fragmento de código:¿Cuál es el rol de ObjectFactory durante JAXB-Unmarshalling?

JAXBContext jc = JAXBContext.newInstance("com.example.entities"); 
Unmarshaller u = jc.createUnmarshaller(); 
r = (Response)u.unmarshal(inputStream); 

clase ObjectFactory:

@XmlRegistry 
public class ObjectFactory { 

    public Response createRsp() { 
     return new Response(); 
    } 
} 

clase de respuesta:

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlRootElement(name="rsp") 
@XmlType 
public class Response { ... } 

El "com.example.entities" deben contener la clase ObjectFactory o jaxb. índice. Me gustaría usar la clase ObjectFactory para decidir alguna inicialización de pojo, pero esta clase nunca se usa: la clase Response siempre se instancia por class.newInstance() directamente. ¿Hay algo mal en esto?

Respuesta

10

puede aprovechar la anotación @XmlType para controlar cómo se crean los objetos:

@XmlType(factoryClass=ObjectFactory.class, factoryMethod="createRsp") 
public class Response { 
} 

Para más información

+1

Dios mío, pasé las últimas horas buscando en vano pistas sobre cómo hacer que mi método de fábrica funcione, hasta que leo esto. ¡Gracias! –

1

La clase ObjectFactory generada por el XJC compilador no es útil para la clase de fábrica y la anotación factoryMethod @XmlType porque el Método factoryMethod debe ser un método no arg estático y el XJC generar métodos de instancia.

Cuestiones relacionadas