首页  >  文章  >  Java  >  为什么 JAXB 在生成 Java 类时省略 @XmlRootElement 注释?

为什么 JAXB 在生成 Java 类时省略 @XmlRootElement 注释?

Linda Hamilton
Linda Hamilton原创
2024-11-01 19:42:29583浏览

Why Does JAXB Omit the @XmlRootElement Annotation When Generating Java Classes?

JAXB 省略 @XmlRootElement 注解

问题

从 XML 模式生成 Java 类时使用 JAXB(Java XML 绑定体系结构)时,您可能会遇到错误,因为没有类具有 @XmlRootElement 注释。这会导致序列化期间出现异常。

解决方案

了解 JAXB 注解规则

JAXB XJC 使用特定规则来确定何时包含 @XmlRootElement 注释。这些规则很复杂,如[本文](文章链接)中所述。

@XmlRootElement 的替代方案

虽然 @XmlRootElement 提供了便利,但它是不是强制性的。您可以使用 [JAXBElement 包装对象](链接到文档)来代替。然而,它们构建起来不太方便,因为它们需要了解 XML 元素名称和命名空间。

使用 ObjectFactory

XJC 会在生成的类模型旁边生成一个 ObjectFactory 类。此类包含工厂方法,这些方法围绕您的对象创建 JAXBElement 包装器,为您处理 XML 名称和命名空间。探索 ObjectFactory 方法以查找为目标对象创建 JAXBElement 的方法。

示例

<code class="java">import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Marshaller;

import org.fpml._2008.fpml_4_5.ObjectFactory;
import org.fpml._2008.fpml_4_5.PositionReport;

// ...

// Create the JAXB context
JAXBContext context = JAXBContext.newInstance(PositionReport.class);

// Create the ObjectFactory
ObjectFactory factory = new ObjectFactory();

// Create a PositionReport instance
PositionReport positionReport = factory.createPositionReport();

// Create the JAXBElement wrapper
JAXBElement<PositionReport> element = factory.createPositionReport(positionReport);

// Create the Marshaller
Marshaller marshaller = context.createMarshaller();

// Marshal the JAXBElement
marshaller.marshal(element, System.out);</code>

以上是为什么 JAXB 在生成 Java 类时省略 @XmlRootElement 注释?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn