Часто использую Enum в XSD, т.к. перечислене это удобно. Т.е. это отдельный тип из НАБОРА констант. Например, код валюты. Для нашего приложения код может быть, только BLR, EUR, USD или RUB. Все ! Больше никаких кодов валюты быть не может. Казалось бы, нет ничего сложного.
Берем данную XSD и генерим из неё JAXB-классы.

<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2013 (http://www.altova.com) by  () -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" version="1.0">
	<xsd:element name="book">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="title" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>Название книги</xsd:documentation>
					</xsd:annotation>
				</xsd:element>
				<xsd:element name="author">
					<xsd:annotation>
						<xsd:documentation>ФИО автора книги</xsd:documentation>
					</xsd:annotation>
					<xsd:simpleType>
						<xsd:restriction base="xsd:string">
							<xsd:minLength value="2"/>
							<xsd:maxLength value="255"/>
						</xsd:restriction>
					</xsd:simpleType>
				</xsd:element>
				<xsd:element name="price">
					<xsd:simpleType>
						<xsd:restriction base="xsd:decimal">
							<xsd:totalDigits value="10"/>
							<xsd:fractionDigits value="2"/>
						</xsd:restriction>
					</xsd:simpleType>
				</xsd:element>
				<xsd:element name="currency">
					<xsd:simpleType>
						<xsd:restriction base="xsd:string">
							<xsd:enumeration value="BLR"/>
							<xsd:enumeration value="EUR"/>
							<xsd:enumeration value="USD"/>
							<xsd:enumeration value="RUB"/>
						</xsd:restriction>
					</xsd:simpleType>
				</xsd:element>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
</xsd:schema>

Вот что получается:

//
// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.4-2 
// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a> 
// Any modifications to this file will be lost upon recompilation of the source schema. 
// Generated on: 2016.02.15 at 06:47:29 PM EAT 
//


package org.classes;

import java.math.BigDecimal;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;


/**
 * <p>Java class for anonymous complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * &lt;complexType>
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;sequence>
 *         &lt;element name="title" type="{http://www.w3.org/2001/XMLSchema}string"/>
 *         &lt;element name="author">
 *           &lt;simpleType>
 *             &lt;restriction base="{http://www.w3.org/2001/XMLSchema}string">
 *               &lt;minLength value="2"/>
 *               &lt;maxLength value="255"/>
 *             &lt;/restriction>
 *           &lt;/simpleType>
 *         &lt;/element>
 *         &lt;element name="price">
 *           &lt;simpleType>
 *             &lt;restriction base="{http://www.w3.org/2001/XMLSchema}decimal">
 *               &lt;totalDigits value="10"/>
 *               &lt;fractionDigits value="2"/>
 *             &lt;/restriction>
 *           &lt;/simpleType>
 *         &lt;/element>
 *         &lt;element name="currency">
 *           &lt;simpleType>
 *             &lt;restriction base="{http://www.w3.org/2001/XMLSchema}string">
 *               &lt;enumeration value="BLR"/>
 *               &lt;enumeration value="EUR"/>
 *               &lt;enumeration value="USD"/>
 *               &lt;enumeration value="RUB"/>
 *             &lt;/restriction>
 *           &lt;/simpleType>
 *         &lt;/element>
 *       &lt;/sequence>
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "title",
    "author",
    "price",
    "currency"
})
@XmlRootElement(name = "book")
public class Book {

    @XmlElement(required = true)
    protected String title;
    @XmlElement(required = true)
    protected String author;
    @XmlElement(required = true)
    protected BigDecimal price;
    @XmlElement(required = true)
    protected String currency;

    /**
     * Gets the value of the title property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getTitle() {
        return title;
    }

    /**
     * Sets the value of the title property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setTitle(String value) {
        this.title = value;
    }

    /**
     * Gets the value of the author property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getAuthor() {
        return author;
    }

    /**
     * Sets the value of the author property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setAuthor(String value) {
        this.author = value;
    }

    /**
     * Gets the value of the price property.
     * 
     * @return
     *     possible object is
     *     {@link BigDecimal }
     *     
     */
    public BigDecimal getPrice() {
        return price;
    }

    /**
     * Sets the value of the price property.
     * 
     * @param value
     *     allowed object is
     *     {@link BigDecimal }
     *     
     */
    public void setPrice(BigDecimal value) {
        this.price = value;
    }

    /**
     * Gets the value of the currency property.
     * 
     * @return
     *     possible object is
     *     {@link String }
     *     
     */
    public String getCurrency() {
        return currency;
    }

    /**
     * Sets the value of the currency property.
     * 
     * @param value
     *     allowed object is
     *     {@link String }
     *     
     */
    public void setCurrency(String value) {
        this.currency = value;
    }

}

И , что получается. Наша currency имеет тип String ! Но должен быть, конечено, Enum — чтобы мы могли записать туда только определенные значения. Решение — вы должны переделать вашу XSD именно так:

<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2013 (http://www.altova.com) by () -->
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	version="1.0">


	<xsd:simpleType name="currencyCountryCode">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="BLR" />
			<xsd:enumeration value="EUR" />
			<xsd:enumeration value="USD" />
			<xsd:enumeration value="RUB" />
		</xsd:restriction>
	</xsd:simpleType>





	<xsd:element name="book">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="title" type="xsd:string">
					<xsd:annotation>
						<xsd:documentation>Название книги</xsd:documentation>
					</xsd:annotation>
				</xsd:element>
				<xsd:element name="author">
					<xsd:annotation>
						<xsd:documentation>ФИО автора книги</xsd:documentation>
					</xsd:annotation>
					<xsd:simpleType>
						<xsd:restriction base="xsd:string">
							<xsd:minLength value="2" />
							<xsd:maxLength value="255" />
						</xsd:restriction>
					</xsd:simpleType>
				</xsd:element>
				<xsd:element name="price">
					<xsd:simpleType>
						<xsd:restriction base="xsd:decimal">
							<xsd:totalDigits value="10" />
							<xsd:fractionDigits value="2" />
						</xsd:restriction>
					</xsd:simpleType>
				</xsd:element>
				<xsd:element name="currency" type="currencyCountryCode" />

				
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
</xsd:schema>

Т.е. вынести отдельно :

	<xsd:simpleType name="currencyCountryCode">
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="BLR" />
			<xsd:enumeration value="EUR" />
			<xsd:enumeration value="USD" />
			<xsd:enumeration value="RUB" />
		</xsd:restriction>
	</xsd:simpleType>

А потом просто сослаться на этот кусок XSD

<xsd:element name="currency" type="currencyCountryCode" />

Тогда при генерации JAXB — классов, будет создан отдельный класс для enum:

import javax.xml.bind.annotation.XmlEnum;
import javax.xml.bind.annotation.XmlType;


/**
 * <p>Java class for currencyCountryCode.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * <p>
 * <pre>
 * &lt;simpleType name="currencyCountryCode">
 *   &lt;restriction base="{http://www.w3.org/2001/XMLSchema}string">
 *     &lt;enumeration value="BLR"/>
 *     &lt;enumeration value="EUR"/>
 *     &lt;enumeration value="USD"/>
 *     &lt;enumeration value="RUB"/>
 *   &lt;/restriction>
 * &lt;/simpleType>
 * </pre>
 * 
 */
@XmlType(name = "currencyCountryCode")
@XmlEnum
public enum CurrencyCountryCode {

    BLR,
    EUR,
    USD,
    RUB;

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

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

}

Реклама