当前位置: 首页 > 知识库问答 >
问题:

Java语言使用jaxb映射抽象类时的lang.InstanceionException

唐高朗
2023-03-14

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

我做了所有相同的事情,只是我的子类不是公共的,并且与抽象类文件位于同一个文件中。我懂java。lang.InstanceionException异常javax。xml。绑定UnmarshaleException:无法创建org的实例。阿帕奇。安巴里。服务器状态DependencyConditionInfo-带有链接的异常:[java.lang.InstanceionException],位于com。太阳xml。绑定v2.runtime。解组器。解组上下文。handleEvent(UnmarshallingContext.java:647)

编辑

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

有人能帮我找到解决办法吗?谢谢

共有1个答案

耿锦
2023-03-14

之所以失败,是因为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

请参见javadoc for each(xmltransive,XmlSeeAlso)

这将阻止jaxb尝试初始化抽象类。

我发现这种方法的唯一缺点是,将有额外的名称空间信息添加到创建的xml中。

由@wyche5000解决

 类似资料:
  • 我有两个需要映射的继承层次结构。一个层次结构是国内的,另一个是野生的。我有抽象的Domestic动物和具体的DomesticCat和DomesticDog扩展它。在第二个层次结构中,我有抽象的Wild动物和具体的WildCat和WildDog扩展它。我还有另外两个类,分别是WildAnimalFeeder具有Wild动物的成员对象和DomesticAnimalFeeder具有DomesticAni

  • 我的班级等级如下: 并尝试将DTO映射到实体 地图如下: 我在详细信息字段中收到带有A或B的DTO,这是在调试器中检查的。但是模型制图者投掷 无法实例化目标组织的实例。包裹基础确保该组织。包裹Base有一个非私有的无参数构造函数。 我尝试使用显式提供程序(没有用于此映射): 我还尝试像这样实现自定义转换器(也没有执行): 模型映射器似乎没有对字段使用这个类型映射,只对hierarhy的根使用。在这

  • 问题内容: 我正在使用ModelMapper Framework(http://modelmapper.org/)映射Java中的对象。在映射包含抽象类的具体类(DTO到实体)时遇到了一个问题。 示例:任务具有AbstractItems列表。 AbstractItems是问题和条件。 映射方法: ModelMapper尝试创建一个AbstractItem的新实例,该实例将引发异常。有没有办法在运行

  • 我正在使用ModelMapper框架(http://modelmapper.org/)用于在Java中映射对象。我在映射包含抽象类的具体类(DTO到Entite)时遇到了一个问题。 示例:任务有一个抽象项列表 抽象项目是问题和标准。 制图方法: ModelMapper尝试创建AbstractItem的新实例,该实例引发异常。有没有办法在运行时映射抽象类<喜欢问题吗-

  • 问题内容: 有没有一种方法可以用Swift语言创建抽象类,还是像Objective-C一样有局限性?我想创建一个与Java定义的抽象类相当的抽象类。 问题答案: Swift中没有抽象类(就像Objective- C一样)。最好的选择是使用Protocol,就像Java接口一样。 然后,借助Swift 2.0,您可以使用协议扩展添加方法实现和计算的属性实现。唯一的限制是您 不能提供成员变量或常量 ,

  • 问题内容: 我正在尝试使用JAXB解组一些XML,但出现“无法创建…的实例”异常。我知道为什么- 它试图建立一个抽象类的实例。我想要的是让它成为特定实现类的实例。我的目标是对setter方法进行特定于类的检查。对于BarImpl,也许“ qux”是有效的baz值,但BarImpl2想要做其他事情。 我没有通过注释Foo来实现这一目标,但是如果我不注释bar,事情就会变得很丑。 问题答案: 您可以执