web-dev-qa-db-fra.com

Élément JAXB de type enum

Je sais donc comment créer un type d'énumération, mais lorsque je lui attribue un type d'élément, le champ d'élément sera simplement de type chaîne et non de type enum. Comment créer une énumération dans mon schéma et demander à JAXB de la générer en tant que type d'énumération Java?

Voici comment je fais ma création d'énumération de type et d'élément:

<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"/>
26
Nikordaris

Vous pouvez former votre schéma XML comme suit:

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

Entraînera la génération de l'énumération suivante:

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);
    }

}

Et la classe suivante qui exploite cet Enum:

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

}

Pour plus d'informations

45
bdoughan

Voir jaxb:globalBindings/@typeSafeEnumBaseici .

3
lexicore