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

Java JAXB:@xmltransive在第三方或外部超类上,java,xml,jakarta-ee,jaxb,Java,Xml,Jakarta Ee,Jaxb,关于JAXB2.1的以下问题,我需要一些帮助 示例:我创建了一个SpecialPerson类,它扩展了一个抽象类Person。 现在,我想使用JAXB将对象结构转换为XML模式。因此,我不希望Person XML类型出现在我的XML模式中,以保持模式的简单性。相反,我希望Person类的字段出现在SpecialPerson XML类型中 通常我会在类级别将注释@XmlTransient添加到Person代码中 问题是Person是第三方类,我不可能在这里添加@XmlTransient。我如何告诉

关于JAXB2.1的以下问题,我需要一些帮助

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

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

问题是Person是第三方类,我不可能在这里添加@XmlTransient。我如何告诉JAXB应该忽略Person类而不注释该类。是否可以以某种方式在外部配置此功能


你以前有过同样的问题吗?你知道这个问题的最佳解决方案是什么吗

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

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

这种方法不是很优雅,但应该可以工作

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

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


好吧,你知道吗,这是一种痛苦。最后,在筛选了许多博客帖子后,我做了如下工作:

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

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


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

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


如果你有兴趣的话。

谢谢你,我会看看安诺克斯。如果你需要帮助,请告诉我。我想你是指特殊人而不是超级人,对吗?问题是我不能注释getter和字段,因为它们是在Person类(超类)中定义的,而不是在子类SpecialPerson中定义的。。。无论如何,您可以覆盖getter\setter,在覆盖方法上添加注释,只需调用super。。。正如我所说,不是很优雅,但它应该可以工作:-)好的,有人能给这个解决方案举个例子吗?它似乎对我不起作用。扩展Observable类和Observable显示在生成的xsd中。那我该怎么办?创建一个包java.util并将package-info.java类与注释一起放入其中?