You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XSD枚举配置问题:JAXB生成Java类未得枚举值且修改报错

解决JAXB将XSD内联枚举生成String的问题

要让JAXB把你的枚举约束生成Java枚举类,核心是把内联的匿名simpleType改成全局命名的simpleType——JAXB默认只会为命名的全局简单类型生成枚举类,内联匿名的会直接生成String类型。

修改步骤

  1. 把allowedApplDataColumnNames元素里的内联simpleType提取出来,定义成全局的命名简单类型
  2. 让该元素直接引用这个全局类型

修改后的完整XSD代码:

<xs:element name="DeletionReq">
    <xs:complexType>
        <xs:sequence>
                <xs:element name="Id" type="xs:long"/>
                <xs:element name="isNewProcess" type="xs:boolean" default="false"/>
                <xs:element name="data" type="tns:data" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

<!-- 全局命名的枚举简单类型 -->
<xs:simpleType name="AllowedApplDataColumnNames">
    <xs:restriction base="xs:string">
        <xs:enumeration value="code1" />
        <xs:enumeration value="code2" />
        <xs:enumeration value="code3" />
        <xs:enumeration value="code4" />
        <xs:enumeration value="code5" />
    </xs:restriction>
</xs:simpleType>

<xs:complexType name="data">
    <xs:sequence>
                  <xs:element name="dataColumnName" type="xs:string" minOccurs="0" />
                  <xs:element name="dataOldValue"   type="xs:string" minOccurs="0"/>
                  <xs:element name="dataNewValue"   type="xs:string" minOccurs="0"/>
                  <xs:element name="testRecord"   type="xs:string" minOccurs="0"/>
                  <xs:element name="projId"   type="xs:string" minOccurs="0"/>
                  <!-- 引用全局的枚举类型 -->
                  <xs:element minOccurs="0" name="allowedApplDataColumnNames" type="tns:AllowedApplDataColumnNames"/>
    </xs:sequence>
</xs:complexType>

额外配置(可选)

如果需要自定义生成的Java枚举类名称、包路径或枚举常量名,可通过JAXB绑定文件(比如binding.xjb)配置:

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" version="2.1" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <jaxb:bindings schemaLocation="你的XSD文件路径">
        <jaxb:bindings node="//xs:simpleType[@name='AllowedApplDataColumnNames']">
            <jaxb:typesafeEnumClass name="ColumnCodeEnum"/>
        </jaxb:bindings>
    </jaxb:bindings>
</jaxb:bindings>

生成时通过xjc命令指定绑定文件:xjc -b binding.xjb your-schema.xsd

内容的提问来源于stack exchange,提问作者Jordan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 06:55:09