JAXB 不会从 XSD 简单类型生成枚举类

问题描述 投票:0回答:1

我的 JAXB XSD 到 Java 类生成器不知何故没有从包含枚举的简单类型创建类,就像这样:

    <xsd:element name="MyPriorityEnum">
        <xsd:simpleType final="restriction">
            <xsd:restriction base="xsd:string">
                <xsd:enumeration value="NORMAL" />
                <xsd:enumeration value="LOW" />
                <xsd:enumeration value="HIGH" />
            </xsd:restriction>
        </xsd:simpleType>
    </xsd:element>

我的

build.gradle
包含以下生成类的任务:

def myXsd = "myxsd-v5.xsd"
def myOutput = "$buildDir/generated/jaxb/model/src/main/java"

tasks.register('generateSources') {
    doLast {
        def jaxbTargetDir = file("$myOutput")

        if (!jaxbTargetDir.exists()) {
            jaxbTargetDir.mkdirs()
        }

        ant.taskdef(name: 'xjc', classname: 'com.sun.tools.xjc.XJCTask', classpath: configurations.jaxb.asPath)

        ant.xjc(
                destdir: "${jaxbTargetDir}",
                schema: "${rootDir}/src/main/resources/xsd/${myXsd}",
                removeOldOutput: 'yes', extension: 'true'
        ) {
            arg(line: '-nv -disableXmlSecurity')
        }
    }
}

tasks.compileJava.dependsOn tasks.openApiGenerate, tasks.generateSources

我正在为所有 JAXB 依赖项使用最新版本,

2.3.1
。这可能是
xjc
的问题吗?

java xsd jaxb xjc
1个回答
0
投票

独立于 jaxb 版本/使用的插件/工具,我可以使用此 xsd 重现问题:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
    <xsd:element name="MyPriorityEnum">
        <xsd:simpleType final="restriction">
            <xsd:restriction base="xsd:string">
                <xsd:enumeration value="NORMAL" />
                <xsd:enumeration value="LOW" />
                <xsd:enumeration value="HIGH" />
            </xsd:restriction>
        </xsd:simpleType>
    </xsd:element>
</xsd:schema>

...但不能这样:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:tns="https://my.org.com/foo/blahr"
    targetNamespace="https://my.org.com/foo/blahr"
    elementFormDefault="qualified">
    <xsd:element name="MyPriorityEnum" type="tns:MyEnumType" />
    <xsd:simpleType name="MyEnumType" final="restriction">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="NORMAL" />
            <xsd:enumeration value="LOW" />
            <xsd:enumeration value="HIGH" />
        </xsd:restriction>
    </xsd:simpleType>
</xsd:schema>

...这意味着它可以工作:xjc 生成枚举类型。

最显着的区别是从“嵌套简单类型”到“引用简单类型”......(?)

© www.soinside.com 2019 - 2024. All rights reserved.