我正在关注博文: 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时,我需要提供一个默认构造函数,因此我无法初始化子类的数据成员。
任何人都可以帮我找到解决方案吗?感谢
答案 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
查看每个(XmlTransient,XmlSeeAlso)
的javadoc这样做可以防止jaxb尝试初始化您的抽象类。
我发现这个方法的唯一缺点是会在创建的xml中添加额外的命名空间信息。
由@ wyche5000解决