小编k0n*_*ner的帖子

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

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

我有一个相对简单的XSD文件来定义我的XML模式.XSD中的复杂类型利用<xs:extension>标记继承.我遇到的问题是我需要所有复杂的类型来生成Java类@XmlRootElement.

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

以下是XSD的示例代码段:

<xs:schema version="1.0" targetNamespace="http://www.knowledgemill.com/kmcs"
  xmlns:kmcs="http://www.knowledgemill.com/kmcs"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
  jaxb:version="2.0"
  xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
  jaxb:extensionBindingPrefixes="xjc"
  elementFormDefault="qualified">
    <xs:annotation>
        <xs:appinfo>
            <jaxb:globalBindings>
                <xjc:simple />
            </jaxb:globalBindings>
        </xs:appinfo>
    </xs:annotation>

    <xs:element name="Artifact" type="kmcs:Artifact"/>
    <xs:element name="EmailArtifact" type="kmcs:EmailArtifact"/>

    <xs:complexType name="Artifact">
        <xs:sequence>
            <xs:element name="artifactId" type="xs:string" minOccurs="0"/>
            <xs:element name="artifactType" type="xs:string" minOccurs="0"/>
            <xs:element name="contentHash" type="xs:string" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="EmailArtifact">
        <xs:complexContent>
            <xs:extension base="kmcs:Artifact">
                <xs:sequence>
                    <xs:element name="subject" type="xs:string" minOccurs="0"/>
                    <xs:element name="threadSubject" type="xs:string" minOccurs="0"/>
                    <xs:element name="from" type="xs:string" minOccurs="0"/>
                    <xs:element name="to" type="xs:string" minOccurs="0"/>
                    <xs:element name="cc" type="xs:string" minOccurs="0"/>
                    <xs:element name="bcc" type="xs:string" …
Run Code Online (Sandbox Code Playgroud)

java xsd jaxb xjc

25
推荐指数
2
解决办法
6万
查看次数

标签 统计

java ×1

jaxb ×1

xjc ×1

xsd ×1