XSD中element和complexType之间的语义差异

Svi*_*ish 7 xsd jaxb

鉴于此XSD:

<xsd:element name="ServiceList">
    <xsd:complexType>
        <xsd:sequence>
            ...
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>

<xsd:complexType name="ServiceList">
    <xsd:sequence>
        ...
    </xsd:sequence>
</xsd:complexType>
Run Code Online (Sandbox Code Playgroud)

这两者之间的语义差异是什么?即命名elements和complexTypes,它们是a的直接孩子schema.

我问的原因是我尝试在XSD中执行此操作:

<xsd:element name="AvailableServices" type="cm:ServiceList" />
<xsd:element name="ExistingServices" type="cm:ServiceList" />
<xsd:complexType name="ServiceList">
    <xsd:sequence>
        ...
    </xsd:sequence>
</xsd:complexType>
Run Code Online (Sandbox Code Playgroud)

但是当使用Maven JAXB插件将其编译成Java类时,我只能创建一个new ServiceList().AvailableServices并且ExistingServices似乎甚至不存在于生成的类中.那么,这里发生了什么?

bdo*_*han 2

类对应于复杂类型

JAXB (JSR-222)中,Java 类对应于复杂类型。全局元素的命名复杂类型和匿名复杂类型对应于根级别类。默认情况下,嵌套复杂类型生成为静态内部类。您可以更改此默认行为:

全球元素

如果全局元素与复杂类型唯一关联(具有匿名复杂类型的全局元素),它将被注释为@XmlRootElement。与全局类型相对应的全局元素将与类@XmlElementDecl中的注释相对应ObjectFactory

了解更多信息