如何在XSD中为基类型生成@XmlRootElement类?

我在使用XJC从XSD生成具有适当JAXB注释的Java类时遇到一些问题。

我有一个相对简单的XSD文件来定义我的XML模式。 XSD中的复杂类型利用标记inheritance。 我遇到的问题是我需要所有复杂类型来生成带有@XmlRootElement Java类。

不幸的是,XJC生成类的方式意味着只有派生类才能获得@XmlRootElement (而不是基类)。 我使用简单的全局绑定指令来确保它解决了我在XJC面临的许多其他问题。

以下是XSD的示例代码段:

                                       

正如我们从上面的代码片段中看到的, EmailArtifact扩展了Artifact

EmailArtifact的java类代码包含以下内容:

 @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "EmailArtifact", propOrder = { "subject", "threadSubject", "from", "to", "cc", "bcc", "messageId", "date", "size", "hasAttachment", "sensitivity", "headerHash" }) @XmlSeeAlso({ ExtendedEmail.class }) @XmlRootElement(name = "EmailArtifact") public class EmailArtifact extends Artifact { protected String subject; protected String threadSubject; protected String from; protected String to; protected String cc; protected String bcc; protected String messageId; @XmlSchemaType(name = "date") protected XMLGregorianCalendar date; protected Long size; protected Boolean hasAttachment; protected String sensitivity; protected String headerHash; 

Artifact的java类代码包含以下内容:

 @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "Artifact", propOrder = { "artifactId", "artifactType", "contentHash" }) @XmlSeeAlso({ ManagedDocArtifact.class, EmailArtifact.class }) public class Artifact { protected String artifactId; protected String artifactType; protected String contentHash; 

EmailArtifact我们可以看到它包含@XmlRootElement但基类型Artifact不包含@XmlRootElement

如何强制XJC为包括基类型在内的所有类生成@XmlRootElement

只需使用xjb文件绑定:

         

并且不要忘记定义相同类型的元素:

   

这个问题引用了以前在JAX-B或JAX-WS RI上工作过的Kohsuke Kawaguchi的博客文章,该文章讨论了RI的决策过程,并且在规范中对此问题缺乏明确性。

博客文章提到简单绑定function是RI的一部分。 您是否使用RI生成代码?