gpt4 book ai didi

enums - 枚举类型的 JAXB 元素

转载 作者:行者123 更新时间:2023-12-03 10:11:48 24 4
gpt4 key购买 nike

所以我知道如何创建枚举类型,但是当我为其设置元素类型时,元素字段将只是字符串类型而不是枚举类型。如何在我的模式中创建枚举并让 JAXB 将其生成为 java 枚举类型?

这就是我如何进行枚举类型和元素创建:

<xsd:simpleType name="myEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="MY_ENUM_1"/>
<xsd:enumeration value="MY_ENUM_2"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:element name="myEnumElement" type="ns1:myEnum"/>

最佳答案

您可以按如下方式形成您的 XML 架构:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema targetNamespace="http://www.example.com" xmlns="http://www.example.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:simpleType name="myEnum">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="MY_ENUM_1"/>
<xsd:enumeration value="MY_ENUM_2"/>
</xsd:restriction>
</xsd:simpleType>
<xsd:element name="root">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="local" type="myEnum"/>
<xsd:element name="ref" type="myEnum"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>

将导致生成以下 Enum:

package com.example;

import javax.xml.bind.annotation.*;

@XmlType(name = "myEnum")
@XmlEnum
public enum MyEnum {

MY_ENUM_1,
MY_ENUM_2;

public String value() {
return name();
}

public static MyEnum fromValue(String v) {
return valueOf(v);
}

}

以及利用该枚举的以下类:

package com.example;

import javax.xml.bind.annotation.*;

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"local",
"ref"
})
@XmlRootElement(name = "root")
public class Root {

@XmlElement(required = true)
protected MyEnum local;
@XmlElement(required = true)
protected MyEnum ref;

public MyEnum getLocal() {
return local;
}

public void setLocal(MyEnum value) {
this.local = value;
}

public MyEnum getRef() {
return ref;
}

public void setRef(MyEnum value) {
this.ref = value;
}

}

更多信息
  • http://blog.bdoughan.com/2011/08/jaxb-and-enums.html
  • 关于enums - 枚举类型的 JAXB 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5806923/

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