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/Single Values/XMLDirectMapping"

m
(Mapping to a Simple Text Node)
Line 28: Line 28:
 
===Mapping to a Simple Text Node===
 
===Mapping to a Simple Text Node===
 
Given the XML schema in the [[#Example 58-2|Schema for XML Direct Mapping to Simple Text Node]] example, the [[#Figure 58-1|XML Direct Mapping to Simple Text Node]] figure illustrates an XML direct mapping to a simple text node in a corresponding XML document. The [[#Example 58-3|Java for XML Direct Mapping to Simple Text Node]] example shows how to configure this mapping in Java.
 
Given the XML schema in the [[#Example 58-2|Schema for XML Direct Mapping to Simple Text Node]] example, the [[#Figure 58-1|XML Direct Mapping to Simple Text Node]] figure illustrates an XML direct mapping to a simple text node in a corresponding XML document. The [[#Example 58-3|Java for XML Direct Mapping to Simple Text Node]] example shows how to configure this mapping in Java.
 
  
 
<span id="Example 58-2"></span>
 
<span id="Example 58-2"></span>
''''' Schema for XML Direct Mapping to Simple Text Node'''''
+
'''''Schema for XML Direct Mapping to Simple Text Node'''''
 
<source lang="xml">
 
<source lang="xml">
<?xml version="1.0" encoding="UTF-8"?>
+
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="phone-number" type="xsd:string"/>
+
  <xsd:complexType name="person">
</xsd:schema>
+
      <xsd:sequence>
 +
        <xsd:element name="phone-number" type="xs:string"/>
 +
      </xs:sequence>
 +
  </xs:complexType>
 +
</xsd:schema>
 
</source>
 
</source>
  
Line 43: Line 46:
  
 
[[Image:dxmstn.gif|XML Direct Mapping to Simple Text Node]]<br><br>
 
[[Image:dxmstn.gif|XML Direct Mapping to Simple Text Node]]<br><br>
 
  
 
<span id="Example 58-3"></span>
 
<span id="Example 58-3"></span>
''''' Java for XML Direct Mapping to Simple Text Node'''''
+
'''''Java for XML Direct Mapping to Simple Text Node'''''
 
<source lang="java">
 
<source lang="java">
XMLDirectMapping numberMapping = new XMLDirectMapping();
+
public class Employee {
numberMapping.setAttributeName("number");
+
  @XmlElement(name="phone-number", namespace="", nillable=false, required=true, type=String.class)
numberMapping.setXPath("text()");
+
  public String phoneNum;
 +
}
 
</source>
 
</source>
 
  
 
===Mapping to a Text Node in a Simple Sequence===
 
===Mapping to a Text Node in a Simple Sequence===

Revision as of 14:58, 9 December 2010


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

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 a Text Node

This section describes using an XML direct mapping when doing the following:


Mapping to a Simple Text Node

Given the XML schema in the Schema for XML Direct Mapping to Simple Text Node example, the XML Direct Mapping to Simple Text Node figure illustrates an XML direct mapping to a simple text node in a corresponding XML document. The Java for XML Direct Mapping to Simple Text Node example shows how to configure this mapping in Java.

Schema for XML Direct Mapping to Simple Text Node

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <xsd:complexType name="person">
      <xsd:sequence>
         <xsd:element name="phone-number" type="xs:string"/>
      </xs:sequence>
   </xs:complexType>
</xsd:schema>

XML Direct Mapping to Simple Text Node

XML Direct Mapping to Simple Text Node

Java for XML Direct Mapping to Simple Text Node

public class Employee {
   @XmlElement(name="phone-number", namespace="", nillable=false, required=true, type=String.class)
   public String phoneNum;
}

Mapping to a Text Node in a Simple Sequence

Given the XML schema in the Schema for XML Direct Mapping to a Text Node in a Simple Sequence example, the XML Direct Mapping to a Text Node in a Simple Sequence figure illustrates an XML direct mapping to individual text nodes in a sequence in a corresponding XML document. The Java for XML Direct Mapping to a Text Node in a Simple Sequence example shows how to configure this mapping in Java.


Schema for XML Direct Mapping to a Text Node in a Simple Sequence

 <?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>

XML Direct Mapping to a Text Node in a Simple Sequence

XML Direct Mapping to a Text Node in a Simple Sequence


Java for XML Direct Mapping to a Text Node in a Simple Sequence

XMLDirectMapping firstNameMapping = new XMLDirectMapping();
firstNameMapping.setAttributeName("firstName");
firstNameMapping.setXPath("first-name/text()");

XMLDirectMapping lastNameMapping = new XMLDirectMapping();
lastNameMapping.setAttributeName("lastName");
lastNameMapping.setXPath("last-name/text()");


Mapping to a Text Node in a Subelement

Given the XML schema in the Schema for XML Direct Mapping to a Text Node in a Subelement example, the XML Direct Mapping to a Text Node in a Subelement figure illustrates an XML direct mapping to a text node in a subelement in a corresponding XML document. The Java for XML Direct Mapping to a Text Node in a Subelemen example shows how to configure this mapping in Java.


Schema for XML Direct Mapping to a Text Node in a Subelement

<?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>


XML Direct Mapping to a Text Node in a Subelement

XML Direct Mapping to a Text Node in a Subelement

Java for XML Direct Mapping to a Text Node in a Subelement

XMLDirectMapping firstNameMapping = new XMLDirectMapping();
firstNameMapping.setAttributeName("firstName");
firstNameMapping.setXPath("personal-info/first-name/text()");

XMLDirectMapping lastNameMapping = new XMLDirectMapping();
lastNameMapping.setAttributeName("lastName");
lastNameMapping.setXPath("personal-info/last-name/text()");


Mapping to a Text Node by Position

Given the XML schema in the Schema for XML Direct Mapping to Text Node by Position exampple, the XML Direct Mapping to Text Node by Position figure illustrates an XML direct mapping to a text node by position in a corresponding XML document. The Java for XML Direct Mapping to Text Node by Position example shows how to configure this mapping in Java.


' Schema for XML Direct Mapping to Text Node by Position

<?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>


XML Direct Mapping to Text Node by Position

XML Direct Mapping to Text Node by Position

' Java for XML Direct Mapping to Text Node by Position

XMLDirectMapping firstNameMapping = new XMLDirectMapping();
firstNameMapping.setAttributeName("firstName");
firstNameMapping.setXPath("name[1]/text()");

XMLDirectMapping lastNameMapping = new XMLDirectMapping();
lastNameMapping.setAttributeName("lastName");
lastNameMapping.setXPath("name[2]/text()");


Mapping to an Attribute

Given the XML schema in this example, the XML Direct Mapping to an Attribute figure illustrates an XML direct mapping to a text node by position in a corresponding XML document. The Java for XML Direct Mapping to an Attribute exampple shows how to configure this mapping in Java.


Schema for XML Direct Mapping to an Attribute

<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>


XML Direct Mapping to an Attribute

XML Direct Mapping to an Attribute


Java for XML Direct Mapping to an Attribute

XMLDirectMapping idMapping = new XMLDirectMapping();
idMapping.setAttributeName("id");
idMapping.setXPath("@id");


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.

Given the XML schema in this exmaple, the XML Direct Mapping to a Specified Schema Type figure illustrates an XML direct mapping to a text node by position in a corresponding XML document. The Java for XML Direct Mapping to a Specified Schema Type example shows how to configure this mapping in Java.


Schema for XML Direct Mapping to a Specified Schema Type

<?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="picture" type="xsd:hexBinary"/>
            <xsd:element name="resume" type="xsd:base64Binary"/>
        </xsd:sequence>

    </xsd:complexType>
</xsd:schema>


XML Direct Mapping to a Specified Schema Type

XML Direct Mapping to a Specified Schema Type


Java for XML Direct Mapping to a Specified Schema Type

XMLDirectMapping pictureMapping = new XMLDirectMapping();
pictureMapping.setAttributeName("picture");
pictureMapping.setXPath("picture/text()");
XMLField pictureField = (XMLField) pictureMapping.getField();
pictureField.setSchemaType(XMLConstants.HEX_BINARY_QNAME);

XMLDirectMapping resumeMapping = new XMLDirectMapping();
resumeMapping.setAttributeName("resume");
resumeMapping.setXPath("resume/text()");
XMLField resumeField = (XMLField) resumeMapping.getField();
resumeField.setSchemaType(XMLConstants.BASE_64_BINARY_QNAME);


Mapping to a List Field with an XML Direct Mapping

Given the XML schema in this exmaple, the XMLDirect Mapping to a List Field figure illustrates an XML direct mapping to an xsd:list type in a corresponding XML document when you represent the list in your object model as a String of white space delimited tokens. The Java for XML Direct Mapping to a List Field Node example shows how to configure this mapping in Java.


Schema for XML Direct Mapping to a List Field

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="employee" type="employee-type"/>
    <xsd:complexType name="employee-type">
        <xsd:sequence>

            <xsd:element name="tasks" type="tasks-type"/>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:simpleType name="tasks-type">
        <xsd:list itemType="xsd:string"/>
    </xsd:simpleType>

</xsd:schema>


XMLDirect Mapping to a List Field

XMLDirect Mapping to a List Field


Java for XML Direct Mapping to a List Field Node

XMLDirectMapping tasksMapping = new XMLDirectMapping();
tasksMapping.setAttributeName("tasks");
XMLField myField = new XMLField("tasks/text()"); // pass in the XPath

myField.setUsesSingleNode(true);
tasksMapping.setField(myField);


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 a Union Field

<?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

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

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

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

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


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 the Schema for XML Direct Mapping with Simple Type Translator example, the Java Class for XML Direct Mapping with Simple Type Translator figure illustrates a Java class that can be mapped to a corresponding XML document.


Schema for XML Direct Mapping with Simple Type Translator

...
    <xs:element name="area-code" type="anySimpleType"/>
    <xs:element name="number" type="anySimpleType"/>
...


Java Class for XML Direct Mapping with Simple Type Translator

Java Class for XML Direct Mapping with Simple Type Translator

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

XML Direct Mapping with a Simple Type Translator

This example shows how to configure this mapping in Java.

Java for XML Direct Mapping with Simple Type Translator

XMLDirectMapping numberMapping = new XMLDirectMapping();
numberMapping.setAttributeName("number");
numberMapping.setXPath("number/text()");
XMLField numberField = (XMLField) numberMapping.getField();
numberField.setIsTypedTextField(true);


For more information, see Simple Type Translator.


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

Back to the top