gpt4 book ai didi

enums - 使用 JAXB 生成的代码中没有枚举

转载 作者:行者123 更新时间:2023-12-02 05:16:03 25 4
gpt4 key购买 nike

我的枚举类

@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>

绑定(bind)我正在使用

 <jaxb:bindings schemaLocation="schema.xsd">
<jaxb:bindings node="//xs:simpleType[@name='error']">
<jaxb:typesafeEnumClass ref="packageName.Error" />
</jaxb:bindings>
</jaxb:bindings>

问题是没有生成枚举文件。我正在使用“maven-jaxb2-plugin”进行代码生成。

最佳答案

默认一个JAXB (JSR-222)实现不会为以数值开头的 XML 枚举创建 Java 枚举。您可以使用外部绑定(bind)文件来生成枚举。

<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>

完整示例


更新

Then what is the point of adding following annotation - @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 实现不会将 JAXB 信息生成到 XML 模式中,因此如果有人想从生成的模式中生成 Java 模型,则可以使用绑定(bind)文件。

关于enums - 使用 JAXB 生成的代码中没有枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14612488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com