Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "EclipseLink/UserGuide/MOXy/Simple Values/Single Values/XMLDirectMapping"
Line 119: | Line 119: | ||
===Mapping to a Text Node in a Subelement=== | ===Mapping to a Text Node in a Subelement=== | ||
− | Given the XML schema in this example, the | + | Given the XML schema in this example, the following figure illustrates an XML direct mapping to a text node in a subelement in a corresponding XML document. |
− | |||
− | |||
<source lang="xml"> | <source lang="xml"> | ||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||
Line 144: | Line 142: | ||
</xsd:schema> | </xsd:schema> | ||
</source> | </source> | ||
− | |||
− | |||
− | |||
[[Image:dxmse.gif|XML Direct Mapping to a Text Node in a Subelement]]<br><br> | [[Image:dxmse.gif|XML Direct Mapping to a Text Node in a Subelement]]<br><br> | ||
− | The | + | The following example shows how to annotate your Java class to obtain this mapping with EclipseLink. Here, because we are going beyond a simple element name customization and are actually introducing new XML structure, EclipseLink's <tt>@XmlPath</tt> annotation is used. |
− | |||
− | |||
<source lang="java"> | <source lang="java"> | ||
@XmlRootElement | @XmlRootElement | ||
Line 164: | Line 157: | ||
</source> | </source> | ||
− | The | + | The example below shows how to to define your mapping information in EclipseLink's OXM metadata format. Here, the customized XML path is defined in the <tt>xml-path</tt> attribute. |
− | |||
− | |||
<source lang="xml"> | <source lang="xml"> | ||
... | ... | ||
Line 183: | Line 174: | ||
===Mapping to a Text Node by Position=== | ===Mapping to a Text Node by Position=== | ||
− | Given the XML schema in this example, the | + | Given the XML schema in this example, the following figure illustrates an XML direct mapping to a text node by position in a corresponding XML document. |
− | |||
− | |||
<source lang="xml"> | <source lang="xml"> | ||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||
Line 201: | Line 190: | ||
</xsd:schema> | </xsd:schema> | ||
</source> | </source> | ||
− | |||
− | |||
− | |||
[[Image:dxmpos.gif|XML Direct Mapping to Text Node by Position]]<br><br> | [[Image:dxmpos.gif|XML Direct Mapping to Text Node by Position]]<br><br> | ||
− | The | + | The example below shows how to configure this mapping in Java. Again, for more complex XML path customization, EclipseLink's <tt>@XmlPath</tt> annotation is used. |
− | |||
− | |||
<source lang="java"> | <source lang="java"> | ||
@XmlRootElement | @XmlRootElement | ||
Line 221: | Line 205: | ||
</source> | </source> | ||
− | The | + | The following example shows how to to define your mapping information in EclipseLink's OXM metadata format. |
− | |||
− | |||
<source lang="xml"> | <source lang="xml"> | ||
... | ... | ||
Line 240: | Line 222: | ||
===Mapping to a Simple Text Node=== | ===Mapping to a Simple Text Node=== | ||
− | Given the XML schema in this example, the | + | Given the XML schema in this example, the following figure illustrates an XML direct mapping to a simple text node in a corresponding XML document. |
− | |||
− | |||
<source lang="xml"> | <source lang="xml"> | ||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||
Line 252: | Line 232: | ||
</xsd:schema> | </xsd:schema> | ||
</source> | </source> | ||
− | |||
− | |||
− | |||
[[Image:dxmstn.gif|XML Direct Mapping to Simple Text Node]]<br><br> | [[Image:dxmstn.gif|XML Direct Mapping to Simple Text Node]]<br><br> | ||
− | The | + | The following example shows how to annotate your Java class to obtain this mapping with EclipseLink. In this case, the <tt>@XmlValue</tt> annotation will be used. |
− | |||
− | |||
<source lang="java"> | <source lang="java"> | ||
@XmlRootElement(name="phone-number") | @XmlRootElement(name="phone-number") | ||
Line 270: | Line 245: | ||
</source> | </source> | ||
− | The | + | The example below shows how to to define your mapping information in EclipseLink's OXM metadata format. |
− | |||
− | |||
<source lang="xml"> | <source lang="xml"> | ||
... | ... | ||
Line 292: | Line 265: | ||
The following XML schema and figure illustrate an XML direct mapping from a <tt>Calendar</tt> object in Java to a <tt>date</tt> field in XML. | The following XML schema and figure illustrate an XML direct mapping from a <tt>Calendar</tt> object in Java to a <tt>date</tt> field in XML. | ||
− | |||
<source lang="xml"> | <source lang="xml"> | ||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||
Line 307: | Line 279: | ||
</xsd:schema> | </xsd:schema> | ||
</source> | </source> | ||
− | |||
− | |||
[[Image:Schematypedate.png]] | [[Image:Schematypedate.png]] | ||
Line 314: | Line 284: | ||
The example below shows how to annotate your Java class to obtain this mapping with EclipseLink. Here, the <tt>@XmlSchemaType</tt> is used to specify the datatype that will appear in the marshalled XML. | The example below shows how to annotate your Java class to obtain this mapping with EclipseLink. Here, the <tt>@XmlSchemaType</tt> is used to specify the datatype that will appear in the marshalled XML. | ||
− | |||
<source lang="java"> | <source lang="java"> | ||
@XmlRootElement | @XmlRootElement | ||
Line 326: | Line 295: | ||
The following example shows how to to define your mapping information in EclipseLink's OXM metadata format. | The following example shows how to to define your mapping information in EclipseLink's OXM metadata format. | ||
− | |||
<source lang="java"> | <source lang="java"> | ||
... | ... | ||
Line 345: | Line 313: | ||
The next example schema and figure illustrate XML direct mappings to two different text nodes of different binary types. | The next example schema and figure illustrate XML direct mappings to two different text nodes of different binary types. | ||
− | |||
<source lang="xml"> | <source lang="xml"> | ||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||
Line 361: | Line 328: | ||
</xsd:schema> | </xsd:schema> | ||
</source> | </source> | ||
− | |||
− | |||
[[Image:dxmscht.gif|XML Direct Mapping to a Specified Schema Type]]<br><br> | [[Image:dxmscht.gif|XML Direct Mapping to a Specified Schema Type]]<br><br> | ||
Line 368: | Line 333: | ||
The example below shows how to annotate your Java class to obtain this mapping with EclipseLink. By default, JAXB will marshall <tt>byte[]</tt> to <tt>base64Binary</tt>, so nothing special is needed for the <tt>resume</tt> mapping. To map to a <tt>hexBinary</tt> field, the <tt>@XmlSchemaType</tt> annotation specifies the XML type, while <tt>@XmlJavaTypeAdapter</tt> specifies the adapter class that will be responsible for converting the value (in this case, the built-in JAXB <tt>HexBinaryAdapter</tt>). | The example below shows how to annotate your Java class to obtain this mapping with EclipseLink. By default, JAXB will marshall <tt>byte[]</tt> to <tt>base64Binary</tt>, so nothing special is needed for the <tt>resume</tt> mapping. To map to a <tt>hexBinary</tt> field, the <tt>@XmlSchemaType</tt> annotation specifies the XML type, while <tt>@XmlJavaTypeAdapter</tt> specifies the adapter class that will be responsible for converting the value (in this case, the built-in JAXB <tt>HexBinaryAdapter</tt>). | ||
− | |||
<source lang="java"> | <source lang="java"> | ||
@XmlRootElement | @XmlRootElement | ||
Line 383: | Line 347: | ||
The following example shows how to to define your mapping information in EclipseLink's OXM metadata format. | The following example shows how to to define your mapping information in EclipseLink's OXM metadata format. | ||
− | |||
<source lang="java"> | <source lang="java"> | ||
... | ... | ||
Line 404: | Line 367: | ||
If the type of a node is not defined in your XML schema, you can configure an XML direct mapping to use the <tt>xsi:type</tt> attribute to provide type information. | If the type of a node is not defined in your XML schema, you can configure an XML direct mapping to use the <tt>xsi:type</tt> attribute to provide type information. | ||
− | Given the XML schema fragment in | + | Given the XML schema fragment in this example, the figure below illustrates a Java class that can be mapped to a corresponding XML document. |
− | |||
− | |||
<source lang="xml"> | <source lang="xml"> | ||
<?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||
Line 423: | Line 384: | ||
</xsd:schema> | </xsd:schema> | ||
</source> | </source> | ||
− | |||
− | |||
− | |||
[[Image:dxmsttc.gif|Java Class for XML Direct Mapping with Simple Type Translator]]<br><br> | [[Image:dxmsttc.gif|Java Class for XML Direct Mapping with Simple Type Translator]]<br><br> |
Revision as of 12:18, 22 December 2010
EclipseLink | |
Website | |
Download | |
Community | |
Mailing List • Forums • IRC • mattermost | |
Issues | |
Open • Help Wanted • Bug Day | |
Contribute | |
Browse Source |
Key API
Contents
- 1 XML Direct Mappings
- 1.1 Mapping to an Attribute
- 1.2 Mapping to a Text Node
- 1.3 Mapping to a Specified Schema Type
- 1.4 Mapping with a Simple Type Translator
- 1.5 Mapping to a Union Field with an XML Direct Mapping
- 1.6 Mapping to a Union of Lists with an XML Direct Mapping
- 1.7 Mapping to a Union of Unions with an XML Direct Mapping
XML Direct Mappings
XML direct mappings map a Java attribute directly to XML text nodes. You can use an XML direct mapping in the following scenarios:
- Mapping to an Attribute
- Mapping to a Text Node
- Mapping to a Specified Schema Type
- Mapping with a Simple Type Translator
- Mapping to a Union Field with an XML Direct Mapping
- Mapping to a Union of Lists with an XML Direct Mapping
- Mapping to a Union of Unions with an XML Direct Mapping
Mapping to an Attribute
Given the XML schema in this example, the figure below illustrates an XML direct mapping to an attribute in a corresponding XML document.
<?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:attribute name="id" type="xsd:integer"/> </xsd:complexType> </xsd:schema>
The following example shows how to annotate your Java class to obtain this mapping with EclipseLink. All that is needed is the standard JAXB @XmlAttribute annotation.
@XmlRootElement public class Customer { @XmlAttribute public Integer id; }
The example below shows how to to define your mapping information in EclipseLink's OXM metadata format.
... <java-type name="Customer"> <xml-root-element name="customer"/> <java-attributes> <xml-attribute java-attribute="id"/> </java-attributes> </java-type> ...
Mapping to a Text Node
This section describes using an XML direct mapping when doing the following:
- Mapping to a Text Node in a Simple Sequence
- Mapping to a Text Node in a Subelement
- Mapping to a Text Node by Position
- Mapping to a Simple Text Node
Mapping to a Text Node in a Simple Sequence
Given the XML schema in this example, the figure below illustrates an XML direct mapping to individual text nodes in a sequence in a corresponding XML document.
<?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="first-name" type="xsd:string"/> <xsd:element name="last-name" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:schema>
The following example shows how to annotate your Java class to obtain this mapping with EclipseLink. Here, the standard JAXB @XmlElement annotation is used, with a customized element name.
@XmlRootElement public class Customer { @XmlElement(name="first-name") public String firstName; @XmlElement(name="last-name") public String lastName; }
The example below shows how to to define your mapping information in EclipseLink's OXM metadata format. To specify a custom element name, the name attribute is used.
... <java-type name="Customer"> <xml-root-element name="customer"/> <java-attributes> <xml-element java-attribute="firstName" name="first-name"/> <xml-element java-attribute="lastName" name="last-name"/> </java-attributes> </java-type> ...
Mapping to a Text Node in a Subelement
Given the XML schema in this example, the following figure illustrates an XML direct mapping to a text node in a subelement in a corresponding XML document.
<?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="personal-info"> <xsd:complexType> <xsd:sequence> <xsd:element name="first-name" type="xsd:string"/> <xsd:element name="last-name" type="xsd:string"/> <xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:schema>
The following example shows how to annotate your Java class to obtain this mapping with EclipseLink. Here, because we are going beyond a simple element name customization and are actually introducing new XML structure, EclipseLink's @XmlPath annotation is used.
@XmlRootElement public class Customer { @XmlPath("personal-info/first-name/text()") public String firstName; @XmlPath("personal-info/last-name/text()") public String lastName; }
The example below shows how to to define your mapping information in EclipseLink's OXM metadata format. Here, the customized XML path is defined in the xml-path attribute.
... <java-type name="Customer"> <xml-root-element name="customer"/> <java-attributes> <xml-element java-attribute="firstName" xml-path="personal-info/first-name/text()"/> <xml-element java-attribute="lastName" xml-path="personal-info/last-name/text()"/> </java-attributes> </java-type> ...
Mapping to a Text Node by Position
Given the XML schema in this example, the following figure illustrates an XML direct mapping to a text node by position in a corresponding XML document.
<?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="name" type="xsd:string" maxOccurs="2"/> </xsd:sequence> </xsd:complexType> </xsd:schema>
The example below shows how to configure this mapping in Java. Again, for more complex XML path customization, EclipseLink's @XmlPath annotation is used.
@XmlRootElement public class Customer { @XmlPath("name[1]/text()") public String firstName; @XmlPath("name[2]/text()") public String lastName; }
The following example shows how to to define your mapping information in EclipseLink's OXM metadata format.
... <java-type name="Customer"> <xml-root-element name="customer"/> <java-attributes> <xml-element java-attribute="firstName" xml-path="name[1]/text()"/> <xml-element java-attribute="lastName" xml-path="name[2]/text()"/> </java-attributes> </java-type> ...
Mapping to a Simple Text Node
Given the XML schema in this example, the following figure illustrates an XML direct mapping to a simple text node in a corresponding XML document.
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="phone-number" type="xsd:string"/> </xsd:schema>
The following example shows how to annotate your Java class to obtain this mapping with EclipseLink. In this case, the @XmlValue annotation will be used.
@XmlRootElement(name="phone-number") public class PhoneNumber { @XmlValue public String number; }
The example below shows how to to define your mapping information in EclipseLink's OXM metadata format.
... <java-type name="PhoneNumber"> <xml-root-element name="phone-number"/> <java-attributes> <xml-value java-attribute="number"/> </java-attributes> </java-type> ...
Mapping to a Specified Schema Type
In most cases, EclipseLink can determine the target format in the XML document. However, there are cases where you must specify which one of a number of possible targets EclipseLink should use. For example, a java.util.Calendar could be marshalled to a schema date, time, or dateTime node, or a byte[] could be marshalled to a schema hexBinary or base64Binary node.
The following XML schema and figure illustrate an XML direct mapping from a Calendar object in Java to a date field in XML.
<?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="hire-date" type="xsd:date"/> </xsd:sequence> </xsd:complexType> </xsd:schema>
The example below shows how to annotate your Java class to obtain this mapping with EclipseLink. Here, the @XmlSchemaType is used to specify the datatype that will appear in the marshalled XML.
@XmlRootElement public class Customer { @XmlElement(name="hire-date") @XmlSchemaType(name="date") public Calendar hireDate; }
The following example shows how to to define your mapping information in EclipseLink's OXM metadata format.
... <java-type name="Customer"> <xml-root-element name="customer"/> <java-attributes> <xml-element java-attribute="hireDate" name="hire-date"> <xml-schema-type name="date"/> </xml-element> </java-attributes> </java-type> ...
Using Java Type Adapters
The next example schema and figure illustrate XML direct mappings to two different text nodes of different binary types.
<?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="resume" type="xsd:base64Binary"/> <xsd:element name="picture" type="xsd:hexBinary"/> </xsd:sequence> </xsd:complexType> </xsd:schema>
The example below shows how to annotate your Java class to obtain this mapping with EclipseLink. By default, JAXB will marshall byte[] to base64Binary, so nothing special is needed for the resume mapping. To map to a hexBinary field, the @XmlSchemaType annotation specifies the XML type, while @XmlJavaTypeAdapter specifies the adapter class that will be responsible for converting the value (in this case, the built-in JAXB HexBinaryAdapter).
@XmlRootElement public class Customer { @XmlElement public byte[] resume; @XmlElement @XmlSchemaType(name="hexBinary") @XmlJavaTypeAdapter(HexBinaryAdapter.class) public byte[] picture; }
The following example shows how to to define your mapping information in EclipseLink's OXM metadata format.
... <java-type name="Customer"> <xml-root-element name="customer"/> <java-attributes> <xml-element java-attribute="resume"/> <xml-element java-attribute="picture"> <xml-schema-type name="hexBinary"/> <xml-java-type-adapter value="javax.xml.bind.annotation.adapters.HexBinaryAdapter"/> </xml-element> </java-attributes> </java-type> ...
Mapping with a Simple Type Translator
If the type of a node is not defined in your XML schema, you can configure an XML direct mapping to use the xsi:type attribute to provide type information.
Given the XML schema fragment in this example, the figure below illustrates a Java class that can be mapped to a corresponding XML document.
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="phone-number" type="phone-number-type"/> <xsd:complexType name="phone-number-type"> <xsd:sequence> <xsd:element name="area-code" type="anySimpleType"/> <xsd:element name="number" type="anySimpleType"/> </xsd:sequence> </xsd:complexType> </xsd:schema>
The following figure illustrates an XML direct mapping with a simple type translator in an XML document that conforms to the schema in the Schema for XML Direct Mapping with Simple Type Translator example.
XML Direct Mapping with a Simple Type Translator
The Java for XML Direct Mapping with Simple Type Translator example shows shows how to annotate your Java class to obtain this mapping with EclipseLink.
Java for XML Direct Mapping with Simple Type Translator
@XmlRootElement(name="phone-number") public class PhoneNumber { @XmlElement(name="area-code") public Object areaCode; @XmlElement public Object number; }
The OXM for XML Direct Mapping with Simple Type Translator example shows how to to define your mapping information in EclipseLink's OXM metadata format.
OXM for XML Direct Mapping with Simple Type Translator
... <java-type name="PhoneNumber"> <xml-root-element name="phone-number"/> <java-attributes> <xml-element java-attribute="areaCode" name="area-code"/> <xml-element java-attribute="number"/> </java-attributes> </java-type> ...
For more information, see Simple Type Translator.
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);