JAXB XJC 代码生成 - ObjectFactory 类不完整
我使用 XJC 命令行工具从 XSD 架构文件生成 Java 类。 ObjectFactory 类生成不完整的内容。它生成没有 JAXBElement
装饰。
这可能是什么原因呢? 问候 多米尼克
I generate Java classes from my XSD schema file using XJC command line tool. The ObjectFactory class generates incomplete content. It generates creation methods without JAXBElement<Type> createType
decoration.
What may be the reason of this?
Regards
Dominik
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
只有 JAXB2 XJC 生成的绑定中的某些类型需要
JAXBElement
包装器。那些具有@XMLRootElement
注释的类型不需要包装器,因此对象工厂不会生成包装器。Only some types in a JAXB2 XJC-generated binding need
JAXBElement
wrappers. Those types that have the@XMLRootElement
annotation do not need the wrapper, and so the object factory does not generate one.仅当您的 XSD 包含复杂类型定义和使用具有相同名称的复杂类型的单独元素定义时,JAXB 才会生成从对象实例创建 JAXBElement 的工厂方法,例如:
在这种情况下,JAXB 不会使用以下注释来注释生成的类@XmlRootElement 注释,但将提供从对象实例创建 JAXBElement 所需的工厂方法。这样,您可以轻松地将非根元素类型的实例序列化为根元素。
因此,除了您打算用作顶级元素的任何复杂类型定义之外,您还应该添加一个具有相同名称的“元素”声明,并且 ObjectFactory 将生成预期的工厂方法。
JAXB generates factory methods that create a JAXBElement from an object instance only if your XSD contains both a complexType definition and a separate element definition using that complexType WITH THE SAME NAME, for example:
In this case, JAXB won't annotate the generated class with an @XmlRootElement annotation, but will provide the factory methods you need to create a JAXBElement from the object instance. That way, you can serialize instances of non-root-element types as root elements easily.
So, you should just add an "element"-declaration with the same name in addition to any complexType definition you intend to be used as a top-level element, and ObjectFactory will generate the expected factory methods.