XSD枚举配置问题:JAXB生成Java类未得枚举值且修改报错
解决JAXB将XSD内联枚举生成String的问题
要让JAXB把你的枚举约束生成Java枚举类,核心是把内联的匿名simpleType改成全局命名的simpleType——JAXB默认只会为命名的全局简单类型生成枚举类,内联匿名的会直接生成String类型。
修改步骤
- 把
allowedApplDataColumnNames元素里的内联simpleType提取出来,定义成全局的命名简单类型 - 让该元素直接引用这个全局类型
修改后的完整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
相关产品推荐
相关产品推荐

