Skip to main content

Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.

Jump to: navigation, search

Difference between revisions of "EclipseLink/UserGuide/MOXy/Simple Values/Enums"

(Mapping Enums using Constant Names)
Line 5: Line 5:
 
|eclipselinktype=MOXy
 
|eclipselinktype=MOXy
 
|api=y
 
|api=y
|apis= * [http://www.eclipse.org/eclipselink/api/latest/index.html?javax/xml/bind/annotation/XmlEnumValue.html XmlEnumValue]
+
|apis= * [http://www.eclipse.org/eclipselink/api/latest/index.html?javax/xml/bind/annotation/XmlEnum.html XmlEnum]
* [http://www.eclipse.org/eclipselink/api/latest/index.html?javax/xml/bind/annotation/XmlEnum.html XmlEnum]
+
* [http://www.eclipse.org/eclipselink/api/latest/index.html?javax/xml/bind/annotation/XmlEnumValue.html XmlEnumValue]
 
}}
 
}}
  

Revision as of 17:00, 14 January 2011

EclipseLink MOXy

Eclipselink-logo.gif
EclipseLink
Website
Download
Community
Mailing ListForumsIRCmattermost
Issues
OpenHelp WantedBug Day
Contribute
Browse Source

Mapping Enums

Java enums can be mapped to XML using the @XmlEnum and @XmlEnumValue annotations.


Mapping Enums using Constant Names

The following schema demonstrates an XML enumeration:

<xs:simpleType name="CustomerType">
   <xs:restriction base="xs:string"/>
      <xs:enumeration value="PROMO_CUSTOMER"/>
      <xs:enumeration value="NEW_CUSTOMER"/>
      <xs:enumeration value="VIP"/>
      <xs:enumeration value="NORMAL"/>
   </xs:restriction>
</xs:simpleType>

If your enum constant names themselves are sufficient for the XML representation, you can simply use the @XmlEnum annotation:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {
   private CustomerType type = CustomerType.NEW_CUSTOMER;
 
   @XmlEnum(String.class)
   private enum CustomerType { PROMO_CUSTOMER, NEW_CUSTOMER, VIP, NORMAL }
 
   ...
}

When marshalled to XML, a Customer would look like this:

<customer>
   <type>NEW_CUSTOMER</type>
</customer>

Mapping Enums to Custom XML Values

Given the following XML schema enumeration:

<xs:simpleType name="RewardLevel">
   <xs:restriction base="xs:int">
      <xs:enumeration value="1"/>
      <xs:enumeration value="5"/>
      <xs:enumeration value="10"/>
      <xs:enumeration value="25"/>
   </xs:restriction>
</xs:simpleType>

The @XmlEnumValue annotation is used to provide an XML value for each enum constant:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {
 
   private RewardLevel discount = RewardLevel.NONE;
 
   @XmlEnum(Integer.class)
   private enum RewardLevel { 
      @XmlEnumValue("0") NONE(0), 
      @XmlEnumValue("5") BRONZE(5), 
      @XmlEnumValue("10") SILVER(10),
      @XmlEnumValue("25") GOLD(25),
      @XmlEnumValue("40") PLATINUM(40);
 
      ...
}

When marshalled to XML, a Customer would look like this:

<customer>
   <discount>0</discount>
</customer>

Eclipselink-logo.gif
Version: 2.2.0 Draft
Other versions...

Back to the top