9

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

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

对象工厂类:

@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() 直接实例化。这有什么问题吗?

4

2 回答 2

13

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

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

了解更多信息

于 2011-04-25T15:58:36.407 回答
2

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

于 2014-08-13T20:31:37.353 回答