EclipseLink динамический MOXy, обращающийся к значениям перечисления

Я использую XSD, указанный ниже, и соответствующий XML. Все хорошо работает с динамическим MOXy, но я понятия не имею, как получить доступ к тип перечисления в java. Какие-либо предложения? Спасибо за помощь.

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema ...>
     <xs:element name="person">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="first-name" type="xs:string"/>
                <xs:element name="last-name" type="xs:string"/>
                <xs:element name="quadrant" type="myns:compass-direction"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:simpleType name="compass-direction">
        <xs:restriction base="xs:string">
            <xs:enumeration value="NORTH"/>
            <xs:enumeration value="SOUTH"/>
            <xs:enumeration value="EAST"/>
            <xs:enumeration value="WEST"/>
        </xs:restriction> 
    </xs:simpleType>

</xs:schema>

//JAVA code
DynamicEntity person = (DynamicEntity) dynamicJAXBContext.createUnmarshaller().unmarshal(instanceDoc);
String firstName = person.get("firstName");
String lastName = person.get("lastName");
//until here it works well

//but now: how to get and set the value of the "quadrant"?
// following lines do not work
String quadrant=person.get("quadrant);
person.set("quadrant","NORTH");

person Micha    schedule 03.03.2011    source источник


Ответы (2)


Чтобы использовать значение перечисления для операции set(), вам нужно сначала найти константу перечисления с помощью DynamicJAXBContext.getEnumConstant(), а затем использовать ее для набора. Например:

Object NORTH = ctx.getEnumConstant("your.package.CompassDirection", "NORTH");
person.set("quadrant", NORTH);

Чтобы получить значение, вы вызываете правильный код, но возвращаемое значение не будет строкой, это будет фактический объект значения перечисления, связанный с этой строкой. Вы должны использовать:

Object quadrant = person.get("quadrant");

Надеюсь это поможет,

Рик

person Rick Barkhouse    schedule 03.03.2011

Если у вас есть значение, вы можете использовать класс, чтобы получить все возможные значения.

protected static Enum[] getValues(Enum enumValue) {
        return enumValue.getClass().getEnumConstants();
    }
person Jörg Fiedler    schedule 10.03.2019