JAXB-Unmarshalling期间的ObjectFactory角色是什么?

时间:2011-04-25 15:51:51

标签: java jaxb unmarshalling objectfactory

我正在使用JAXB 2.2.2来解析一个简单的XML-REST流。这是一段代码:

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

ObjectFactory类:

@XmlRegistry
public class ObjectFactory {

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

响应类:

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

“com.example.entities”必须包含ObjectFactory类或jaxb.in​​dex。我想使用ObjectFactory类来决定一些pojo初始化,但是从不使用这些类:Response类总是直接由class.newInstance()实例化。 这有什么不对吗?

2 个答案:

答案 0 :(得分:11)

您可以利用@XmlType注释来控制对象的创建方式:

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

了解更多信息

答案 1 :(得分:1)

XJC编译器生成的ObjectFactory类对factoryClass和factoryMethod @XmlType注释无用,因为factoryMethod必须是静态无参数方法,而XJC生成实例方法。