我需要一些有关 JAXB 2.1 的以下问题的帮助。
示例:我创建了一个扩展抽象类 Person 的 SpecialPerson 类。
现在我想使用 JAXB 将我的对象结构转换为 XML 模式。因此,我不希望 Person XML 类型出现在我的 XML 模式中以保持模式简单。相反,我希望 Person 类的字段出现在 SpecialPerson XML 类型中。
通常我会将类级别的注释@XmlTransient 添加到Person 代码中。
问题是 Person 是第三方类,我无法在此处添加 @XmlTransient。我如何告诉 JAXB 它应该忽略 Person 类而不注释该类。是否可以以某种方式在外部进行配置?
你以前有过同样的问题吗?任何想法这个问题的最佳解决方案是什么?
好的,这是你知道的。最后,在筛选了许多博客帖子之后,这就是我所做的,
像这样在\'third-party class\'包中添加了一个package-info.java类,
@javax.xml.bind.annotation.XmlAccessorType(javax.xml.bind.annotation.XmlAccessType.NONE)
包第三方包;
就我而言,它只是一个包裹,所以很容易。显然,您必须为每个单独的包结构执行此操作。我还没有尝试在主包级别进行此操作。
好的,任何人都可以举一个这个解决方案的例子吗?它似乎对我不起作用。扩展 Observable 类和 observable 显示在生成的 xsd 中。那我该怎么办?创建一个包 java.util 并将 package-info.java 类与注释一起放入其中?
您可以使用 Annox 为第三方类提供映射。
- 谢谢 lexicore,我会看看 Annox。
如果您需要帮助,请告诉我。
EclipseLink JAXB (MOXy) 实现提供了一种将元数据表示为 XML 的方法,您可以使用:
http://wiki.eclipse.org/EclipseLink/Examples/MOXy/EclipseLink-OXM.XML
您可以使用注释指定一些元数据,而将其余的指定为 XML。以下是您的文档的外观:
我在这里发布了另一个带有完整代码的解决方案
JAXB 外部自定义绑定 XJC 问题 - 解析结果为空节点
如果你有兴趣的话。
您可以使用@XmlTransient 注释您的SuperPerson 类,这将指示JaxB 不要自动编组所有属性。然后用相关的注解来注解你想要序列化的每个getter(或字段)。
这种方法不是很优雅,但应该可以工作
我猜你的意思是 SpecialPerson 而不是 SuperPerson,对吧?问题是我无法注释 getter 和字段,因为它们是在 Person 类(超类)中定义的,而不是在子类 SpecialPerson 中定义的。
是的,我的意思是 SpecialPerson ......无论如何,您可以覆盖 getter\\\\setter 在覆盖方法上添加注释并简单地调用 super... 正如我所说,不是很优雅,但它应该可以工作:-)