EclipseLink 动态 MOXy 访问枚举值

发布于 2024-10-19 20:37:15 字数 1448 浏览 6 评论 0原文

我正在使用下面列出的 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");

I'm using the XSD listed below and a corresponding XML. Everything works well with dynamic MOXy but I haven't any idea how to access the enum type within java.
Any suggestions?
Thanks for help.

<?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");

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

别闹i 2024-10-26 20:37:15

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

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

要获取该值,您正在调用正确的代码,但返回的值不会是字符串,而是与该字符串关联的实际枚举值对象。你应该使用:

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

希望这有帮助,

瑞克

To use an enum value for a set() operation, you need to first look up the enum constant using DynamicJAXBContext.getEnumConstant(), and then use that for the set. For example:

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

To get the value, you are calling the correct code, but the value that comes back will not be a String, it will the actual enum value Object associated with that String. You should use:

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

Hope this helps,

Rick

阪姬 2024-10-26 20:37:15

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

protected static Enum[] getValues(Enum enumValue) {
        return enumValue.getClass().getEnumConstants();
    }

If you have on value you can use the class to get all possible values.

protected static Enum[] getValues(Enum enumValue) {
        return enumValue.getClass().getEnumConstants();
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文