【发布时间】:2010-11-28 04:41:15
【问题描述】:
我使用 XJC 命令行工具从我的 XSD 模式文件生成 Java 类。 ObjectFactory 类生成不完整的内容。它生成没有JAXBElement<Type> createType装饰的创建方法。
这可能是什么原因? 问候 多米尼克
【问题讨论】:
我使用 XJC 命令行工具从我的 XSD 模式文件生成 Java 类。 ObjectFactory 类生成不完整的内容。它生成没有JAXBElement<Type> createType装饰的创建方法。
这可能是什么原因? 问候 多米尼克
【问题讨论】:
只有 JAXB2 XJC 生成的绑定中的某些类型需要 JAXBElement 包装器。那些带有@XMLRootElement 注释的类型不需要包装器,因此对象工厂不会生成包装器。
【讨论】:
只有当您的 XSD 同时包含 complexType 定义和使用具有相同名称的 complexType 的单独元素定义时,JAXB 才会生成工厂方法,这些方法会从对象实例创建 JAXBElement,例如:
<complexType name="my-type">
...
</complexType>
<element name="my-type" type="tns:my-type"/>
在这种情况下,JAXB 不会使用 @XmlRootElement 注释对生成的类进行注释,但会提供从对象实例创建 JAXBElement 所需的工厂方法。这样,您可以轻松地将非根元素类型的实例序列化为根元素。
因此,除了您打算用作顶级元素的任何 complexType 定义之外,您只需添加一个具有相同名称的“元素”声明,ObjectFactory 将生成预期的工厂方法。
【讨论】: