我的枚举课
@XmlType
@XmlEnum(Integer.class)
public enum Error {
@XmlEnumValue("1")
ENUM_VALUE_1(1, "some string 1", "some string 1"),
@XmlEnumValue("2")
ENUM_VALUE_2(2, "some string 2", "some string 2");
private Error(int errorCode, String msgKey, String message) {
this.errorCode = errorCode;
this.msgKey = msgKey;
this.message = message;
}
}
生成的xsd
<xs:simpleType name="error">
<xs:restriction base="xs:int">
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
</xs:restriction>
</xs:simpleType>
绑定我正在使用
<jaxb:bindings schemaLocation="schema.xsd">
<jaxb:bindings node="//xs:simpleType[@name='error']">
<jaxb:typesafeEnumClass ref="packageName.Error" />
</jaxb:bindings>
</jaxb:bindings>
问题是没有生成enum文件。我使用“maven-jaxb2-plugin”代码生成。
答案 0 :(得分:3)
默认情况下,JAXB (JSR-222)实现不会为以数值开头的XML枚举创建Java枚举。您可以使用外部绑定文件来生成枚举。
<jxb:bindings
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
version="2.1">
<jxb:bindings schemaLocation="schema.xsd">
<jxb:bindings node="//xs:simpleType[@name='error']/xs:restriction/xs:enumeration[@value='1']">
<jxb:typesafeEnumMember name="ONE"/>
</jxb:bindings>
<jxb:bindings node="//xs:simpleType[@name='error']/xs:restriction/xs:enumeration[@value='2']">
<jxb:typesafeEnumMember name="TWO"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
完整示例
<强>更新强>
那么添加以下注释有什么意义 - @XmlEnumValue( “1”)
在Java类用例的开始,您使用@XmlEnumValue("1")
注释将枚举映射到所需的XML结构。
<xs:simpleType name="error">
<xs:restriction base="xs:int">
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
</xs:restriction>
</xs:simpleType>
JAXB实现不会在XML模式中生成JAXB信息,因此如果有人想从生成的模式生成Java模型,则可以使用绑定文件。