JAXB:解决缺少 @XmlRootElement 注释的问题
遇到错误消息“无法封送类型...因为它缺少 @XmlRootElement”注释”可能非常常见,令人困惑。这源于 JAXB(Java XML 绑定架构)XJC 工具不会自动在生成的类上生成关键的 @XmlRootElement 注释,从而阻碍了它们用于序列化。
揭示背后的逻辑XJC 的注解行为
理解为什么 XJC 决定不对类进行注解与 @XmlRootElement 是关键。这种选择受到一组复杂规则的指导。本质上,@XmlRootElement 提供有关 XML 元素名称和命名空间的重要详细信息,在编组和解组过程中指导 JAXB。
寻求 @XmlRootElement 的替代方案
虽然 @ XmlRootElement 保留其位置是为了方便,它不是 JAXB 的必需品。或者,可以求助于 JAXBElement 包装器对象。这些对象传达与 @XmlRootElement 相同的 XML 名称和命名空间信息,尽管是以对象形式而不是注释形式。
@XmlRootElement 的便利之处在于它不需要了解 XML 元素名称和命名空间,这通常不涉及业务逻辑。然而,构造 JAXBElement 对象可能很麻烦,需要这些特定的知识。
利用 JAXB 的 ObjectFactory
幸运的是,XJC 不仅仅生成类模型。它还提供了一个名为 ObjectFactory 的 类。 ObjectFactory 包含生成的工厂方法,这些方法围绕自定义对象创建 JAXBElement 包装器。此功能减轻了 XML 名称和命名空间跟踪的负担。人们只需要探索 ObjectFactory 中可用的方法(在庞大的模式中通常有很多方法)来确定适合他们需求的方法。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3