EclipseLink动态MOXy访问枚举值

时间:2011-03-03 13:33:07

标签: java dynamic jaxb eclipselink moxy

我正在使用下面列出的XSD和相应的XML。一切都适用于dynamic 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");

2 个答案:

答案 0 :(得分:1)

要对set()操作使用枚举值,首先需要使用DynamicJAXBContext.getEnumConstant()查找枚举常量,然后将其用于集合。例如:

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

要获取值,您正在调用正确的代码,但返回的值将不是String,它将是与该String关联的实际枚举值Object。你应该使用:

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

希望这有帮助,

瑞克

答案 1 :(得分:0)

如果您具有价值,则可以使用该类获取所有可能的值。

font: 500 12px/100px "Roboto", sans-serif;