Difference between revisions of "EclipseLink/UserGuide/MOXy/Simple Values/Special Schema Types/Unions"
(New page: ==Mapping to a Union Field with an XML Direct Mapping== Given the XML schema in the Schema for XML Direct Mapping to a Union Field example, the [[#Figure 58-8|Java Class...) |
m |
||
Line 1: | Line 1: | ||
− | ==Mapping to a Union Field with an XML Direct Mapping | + | {{EclipseLink_UserGuide |
+ | |info=y | ||
+ | |toc=y | ||
+ | |eclipselink=y | ||
+ | |eclipselinktype=MOXy | ||
+ | |api=y | ||
+ | |apis= * | ||
+ | }} | ||
+ | =Mapping to a Union Field with an XML Direct Mapping= | ||
Given the XML schema in the [[#Example 58-16|Schema for XML Direct Mapping to a Union Field]] example, the [[#Figure 58-8|Java Class for XML Direct Mapping to a Union Field]] figure illustrates a Java class that can be mapped to a corresponding XML document. Note the <tt>shoeSize</tt> attribute in this class: when using a union field, the corresponding attribute must be able to store all possible values. | Given the XML schema in the [[#Example 58-16|Schema for XML Direct Mapping to a Union Field]] example, the [[#Figure 58-8|Java Class for XML Direct Mapping to a Union Field]] figure illustrates a Java class that can be mapped to a corresponding XML document. Note the <tt>shoeSize</tt> attribute in this class: when using a union field, the corresponding attribute must be able to store all possible values. | ||
Line 148: | Line 156: | ||
vacationField.addSchemaType(XMLConstants.FLOAT_QNAME); | vacationField.addSchemaType(XMLConstants.FLOAT_QNAME); | ||
vacationMapping.setField(vacationField); | vacationMapping.setField(vacationField); | ||
+ | |||
+ | |||
+ | |||
+ | {{EclipseLink_MOXy | ||
+ | |previous= [[EclipseLink/UserGuide/MOXy/Simple_Values/Special_Schema_Types|Special Schema Types]] | ||
+ | |up= [[EclipseLink/UserGuide/MOXy/Simple_Values/Special_Schema_Types|Special Schema Types]] | ||
+ | |next= [[EclipseLink/UserGuide/MOXy/Simple_Values/Binary_Types|Binary Types]] | ||
+ | |version=2.2.0 Draft | ||
+ | }} |
Revision as of 10:09, 6 April 2011
EclipseLink MOXy
EclipseLink | |
Website | |
Download | |
Community | |
Mailing List • Forums • IRC • mattermost | |
Issues | |
Open • Help Wanted • Bug Day | |
Contribute | |
Browse Source |
Key API
Contents
Mapping to a Union Field with an XML Direct Mapping
Given the XML schema in the Schema for XML Direct Mapping to a Union Field example, the Java Class for XML Direct Mapping to a Union Field figure illustrates a Java class that can be mapped to a corresponding XML document. Note the shoeSize attribute in this class: when using a union field, the corresponding attribute must be able to store all possible values.
Schema for XML Direct Mapping to Union of Lists
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="customer" type="customer-type"/> <xsd:complexType name="customer-type"> <xsd:sequence> <xsd:element name="shoe-size" type="size-type"/> </xsd:sequence> </xsd:complexType> <xsd:simpleType name="size-type"> <xsd:union memberTypes="xsd:decimal xsd:string"/> </xsd:simpleType> </xsd:schema>
Java Class for XML Direct Mapping to a Union Field
The XML Direct Mapping to the First Valid Union Type figure illustrates an XML direct mapping to a union field in an XML document that conforms to the schema in the Schema for XML Direct Mapping to a Union Field example. When EclipseLink unmarshalls the XML document, it tries each of the union types until it can make a successful conversion. The first schema type in the union is xsd:decimal. Because "10.5" is a valid decimal, EclipseLink converts the value to the appropriate type. If the Object attribute is specific enough to trigger an appropriate value, EclipseLink will use that type instead. Otherwise, EclipseLink uses a default (in this case BigDecimal). You can override this behavior in Java code.
XML Direct Mapping to the First Valid Union Type
The XML Direct Mapping to Another Valid Union Type figure illustrates an XML direct mapping to union field in another XML document that conforms to the schema in Schema for XML Direct Mapping to a Union Field. In this document, the value "M" is not a valid xsd:decimal type so the next union type is tried. The next union type is xsd:string and a conversion can be done.
XML Direct Mapping to Another Valid Union Type
This example shows how to configure this mapping in Java.
Java for XML Direct Mapping to a Union Type
XMLDirectMapping shoeSizeMapping = new XMLDirectMapping(); shoeSizeMapping.setAttributeName("shoeSize"); XMLUnionField shoeSizeField = new XMLUnionField(); shoeSizeField.setXPath("shoe-size/text()"); shoeSizeField.addSchemaType(XMLConstants.DECIMAL_QNAME); shoeSizeField.addSchemaType(XMLConstants.STRING_QNAME); shoeSizeMapping.setField(shoeSizeField);
To override the default conversion, use the XMLUnionField method addConversion:
shoeSizeField.addConversion(XMLConstants.DECIMAL_QNAME, Float.class);
Mapping to a Union of Lists with an XML Direct Mapping
Given the XML schema in Schema for XML Direct Mapping to Union of Lists, the XML Direct Mapping to Union of Lists figure illustrates an XML direct mapping to a union of lists in a corresponding XML document. The Java for XML Direct Mapping to Union of Lists example shows how to configure this mapping in Java.
Schema for XML Direct Mapping to Union of Lists
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="vacation" type="unionOfLists"/> <xsd:simpleType name="unionOfLists"> <xsd:union memberTypes="xsd:double"> <xsd:simpleType> <xsd:list itemType="xsd:date"/> </xsd:simpleType> <xsd:simpleType> <xsd:list itemType="xsd:integer"/> </xsd:simpleType> </xsd:union> </xsd:simpleType> </xsd:schema>
XML Direct Mapping to Union of Lists
Note that in this example, valid XML documents contain either all xsd:double, all xsd:date, or all xsd:integer values.
Java for XML Direct Mapping to Union of Lists
XMLDirectMapping mapping = new XMLDirectMapping(); mapping.setAttributeName("vacation"); mapping.setXPath("UnionOfLists/text()");
Mapping to a Union of Unions with an XML Direct Mapping
Given the XML schema in the Schema for XML Direct Mapping to a Union of Unions example, the Java Class for XML Direct Mapping to a Union of Unions figure illustrates a Java class that can be mapped to a corresponding XML document. The Java for XML Direct Mapping to a Union of Unions example shows how to configure this mapping in Java.
Schema for XML Direct Mapping to a Union of Unions
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="vacation" type="unionOfUnions"/> <xsd:simpleType name="unionOfUnions"> <xsd:union> <xsd:simpleType> <xsd:union> <xsd:simpleType> <xsd:list itemType="xsd:date"/> </xsd:simpleType> <xsd:simpleType> <xsd:list itemType="xsd:integer"/> </xsd:simpleType> </xsd:union> </xsd:simpleType> <xsd:simpleType> <xsd:union> <xsd:simpleType> <xsd:list itemType="xsd:string"/> </xsd:simpleType> <xsd:simpleType> <xsd:list itemType="xsd:float"/> </xsd:simpleType> </xsd:union> </xsd:simpleType> </xsd:union> </xsd:simpleType> </xsd:schema>
Java Class for XML Direct Mapping to a Union of Unions
Java for XML Direct Mapping to a Union of Unions
XMLDirectMapping vacationMapping = new XMLDirectMapping(); vacationMapping.setAttributeName("vacation"); XMLUnionField vacationField = new XMLUnionField(); vacationField.setXPath("vacation/text()"); vacationField.addSchemaType(XMLConstants.DATE_QNAME); vacationField.addSchemaType(XMLConstants.INTEGER_QNAME); vacationField.addSchemaType(XMLConstants.STRING_QNAME); vacationField.addSchemaType(XMLConstants.FLOAT_QNAME); vacationMapping.setField(vacationField);