使用jaxb映射抽象类时的java.lang.InstantiationException

时间:2016-10-27 05:27:35

标签: inheritance jaxb xsitype

我正在关注博文: http://blog.bdoughan.com/2010/11/jaxb-and-inheritance-using-xsitype.html

我做了所有相同的事情,除了我的子类不是公共的,并且与抽象类文件的文件在同一个文件中。我得到java.lang.InstantiationException异常     javax.xml.bind.UnmarshalException:无法创建org.apache.ambari.server.state.DependencyConditionInfo的实例       - 链接异常:     [java.lang.InstantiationException]         at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:647)

修改

当我使用@XmlSeeAlso时,我需要提供一个默认构造函数,因此我无法初始化子类的数据成员。

任何人都可以帮我找到解决方案吗?感谢

1 个答案:

答案 0 :(得分:2)

为什么失败是因为Jaxb将尝试创建User实例。这是抽象的,因此也是失败的。

在抽象类上添加注释

@XmlTransient //Prevents the mapping of a JavaBean property/type to XML representation
@XmlSeeAlso({Admin.class, <other class>}) //Instructs JAXB to also bind other classes when binding this class

查看每个(XmlTransientXmlSeeAlso

的javadoc

这样做可以防止jaxb尝试初始化您的抽象类。

我发现这个方法的唯一缺点是会在创建的xml中添加额外的命名空间信息。

由@ wyche5000解决