JAXB:@XmlTransient在第三方或外部超类上

时间:2010-03-30 08:40:23

标签: java xml java-ee jaxb

对于JAXB 2.1的以下问题,我需要一些帮助。

示例:我创建了一个扩展抽象类Person的SpecialPerson类。 现在我想使用JAXB将我的对象结构转换为XML模式。因此,我不希望Person XML类型出现在我的XML模式中以保持模式简单。相反,我希望Person类的字段出现在SpecialPerson XML类型中。

通常我会在类级别上将注释@XmlTransient添加到Person代码中。

问题是Person是第三方类,我不可能在这里添加@XmlTransient。如何在没有注释类的情况下告诉JAXB它应该忽略Person类。是否有可能以某种方式在外部配置?

你以前遇到过同样的问题吗?任何想法,这个问题的最佳解决方案是什么?

5 个答案:

答案 0 :(得分:3)

好吧,这是你知道什么的痛苦。最后,在筛选了许多博客文章之后,这就是我所做的,

在“第三方类”包中添加了一个package-info.java类,如下所示,

@ javax.xml.bind.annotation.XmlAccessorType(javax.xml.bind.annotation.XmlAccessType.NONE) 包第三方包;

在我的情况下,它只是一个包,所以很容易。显然,您必须为每个单独的包结构执行此操作。我没有尝试在主程序包级别执行此操作。

答案 1 :(得分:2)

您可以使用Annox为第三方类提供映射。

答案 2 :(得分:1)

EclipseLink JAXB(MOXy)实现提供了一种将元数据表示为可以使用的XML的方法:

您可以使用注释指定一些元数据,其余的作为XML。以下是您的文档的样子:

< XML的绑定         的xmlns = “http://www.eclipse.org/eclipselink/xsds/persistence/oxm” >

< java的类型>

< java-type name =“Person”xml-transient =“true”/>

< / java的类型>

< / XML的绑定>

答案 3 :(得分:0)

您可以使用@XmlTransient注释您的SuperPerson类,这将指示JaxB不自动封送所有属性。然后使用相关注释注释要序列化的每个getter(或字段)。

这种方法不是很优雅,但应该可行

答案 4 :(得分:0)

我在这里发布了另一个完整代码的解决方案

JAXB External Custom Binding XJC Issue - Parsing results in empty node

如果您有兴趣。