JAXB需要一个公共的无参数构造函数?

yeg*_*256 18 java xml jaxb

在编组期间,JAXB需要一个公共的无参数构造函数?

 Marshaller msh = ctx.createMarshaller();
 msh.marshal(object, System.out);
Run Code Online (Sandbox Code Playgroud)

我传递的是一个对象,而不是一个类.为什么JAXB需要构造函数?构建什么?

bdo*_*han 8

在编组操作期间,JAXB实现不需要no-arg构造函数.JAXB确实需要一个用于解组.通常,在创建JAXBContext时,缺少no-arg构造函数会导致错误.您正在使用的JAXB实现可能会延迟初始化,直到执行实际操作.

通常,对于多arg构造函数的支持是我们在未来版本的JAXB中应该考虑的事情.在JAXB(MOXy)EclipseLink实现中,我们为此功能打开了一个增强请求(随意添加相关详细信息):

在当前版本的JAXB中,您可以使用XmlAdapter来支持此用例:

  • @Vincenzo你绝对可以添加一个无参数的构造函数.如果由于某种原因您无法修改模型类,则可以使用XmlAdapter. (2认同)

Dav*_*les 6

正如其他人所指出的那样,它确实不需要一个,但至少在Sun的实现中,它确实需要一个.你可以使用虚拟构造函数解决这个问题:

private MyObject() {
    throw new UnsupportedOperationException("No-arg constructor is just to keep JAXB from complaining");
}
Run Code Online (Sandbox Code Playgroud)