我的 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
的问题吗?
独立于 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 生成枚举类型。
最显着的区别是从“嵌套简单类型”到“引用简单类型”......(?)