Skip to main content

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.

Jump to: navigation, search

Difference between revisions of "EclipseLink/DesignDocs/293925/MOXyExtensions/XMLDirectMapping"

(XML Instance Document)
(Requirements)
Line 1: Line 1:
 
<div style="border: 1px solid rgb(0, 0, 0); margin: 5px; padding: 5px; float: right;">__TOC__</div>  
 
<div style="border: 1px solid rgb(0, 0, 0); margin: 5px; padding: 5px; float: right;">__TOC__</div>  
= XMLDirectMapping =
+
= XMLDirectMapping (page under construction) =
  
 
== Requirements ==
 
== Requirements ==
Provide support for XML direct mappings.
+
Provide support for XML direct mappings.
  
 
The following structures are to be extended to support XML direct mapping configuration:
 
The following structures are to be extended to support XML direct mapping configuration:
Line 9: Line 9:
 
* <code>xml-element</code>
 
* <code>xml-element</code>
  
 
+
[http://wiki.eclipse.org/EclipseLink/DesignDocs/293925/PathBasedMappings Path-based] mappings must be supported.
Path-based mappings must be supported.  Design notes are located [http://wiki.eclipse.org/EclipseLink/DesignDocs/293925/PathBasedMappings here].
+
  
 
The following should be configurable:
 
The following should be configurable:
* Converter
+
* Null policy
 
* Get/set method names
 
* Get/set method names
* Read only (bolean)
+
* Read only
* Null policy
+
* Attribute classification
 
* Default null value
 
* Default null value
* CDATA (boolean)
+
* CDATA
 +
* Converter
  
 
== Example ==
 
== Example ==
Line 46: Line 46:
 
         <attribute-mapping xsi:type="xml-direct-mapping">
 
         <attribute-mapping xsi:type="xml-direct-mapping">
 
           <attribute-name>firstName</attribute-name>
 
           <attribute-name>firstName</attribute-name>
           <field name="personal-info/first-name/text()" xsi:type="node"/>
+
           <field name="first-name/text()" xsi:type="node"/>
 
         </attribute-mapping>
 
         </attribute-mapping>
 
         <attribute-mapping xsi:type="xml-direct-mapping">
 
         <attribute-mapping xsi:type="xml-direct-mapping">
 
           <attribute-name>lastName</attribute-name>
 
           <attribute-name>lastName</attribute-name>
           <field name="personal-info/last-name/text()" xsi:type="node"/>
+
           <field name="last-name/text()" xsi:type="node"/>
        </attribute-mapping>
+
        <attribute-mapping xsi:type="xml-direct-mapping">
+
            <attribute-name>mgrId</attribute-name>
+
            <field name="projects/prj:project/@managerId" xsi:type="node"/>
+
 
         </attribute-mapping>
 
         </attribute-mapping>
 
         <attribute-mapping xsi:type="xml-direct-mapping">
 
         <attribute-mapping xsi:type="xml-direct-mapping">
 
           <attribute-name>projectName</attribute-name>
 
           <attribute-name>projectName</attribute-name>
           <field name="projects/prj:project/text()" xsi:type="node"/>
+
           <field name="prj:project/text()" xsi:type="node"/>
 
         </attribute-mapping>
 
         </attribute-mapping>
 
     <attribute-mappings>
 
     <attribute-mappings>
Line 80: Line 76:
 
<?xml version="1.0" encoding="UTF-8"?>
 
<?xml version="1.0" encoding="UTF-8"?>
 
<employee id="66" xmlns="http://www.example.com/employees" xmlns:prj="http://www.example.com/projects">
 
<employee id="66" xmlns="http://www.example.com/employees" xmlns:prj="http://www.example.com/projects">
     <personal-info>
+
     <first-name>Joe</first-name>
        <first-name>Joe</first-name>
+
    <last-name>Black</last-name>
        <last-name>Black</last-name>
+
     <prj:project>XML External Metadata Support</prj:project>
     </personal-info>
+
    <projects>
+
        <prj:project managerId="99">XML External Metadata Support</prj:project>
+
    </projects>
+
 
</employee>
 
</employee>
 
</source>
 
</source>
Line 103: Line 95:
 
             <java-attributes>
 
             <java-attributes>
 
                 <xml-attribute java-attribute="empId" name="id" />
 
                 <xml-attribute java-attribute="empId" name="id" />
                 <xml-element java-attribute="firstName" name="first-name">
+
                 <xml-element java-attribute="firstName" name="first-name" />
                    <xml-element-wrapper name="personal-info" />
+
                 <xml-element java-attribute="lastName" name="last-name" />
                </xml-element>
+
                 <xml-element java-attribute="projectName" name="prj:project" />
                 <xml-element java-attribute="lastName" name="last-name" >
+
                    <xml-element-wrapper name="personal-info" />
+
                 </xml-element>
+
                <xml-attribute java-attribute="mgrId" name="managerId" >
+
                    <xml-element-wrapper name="projects/prj:project" />
+
                </xml-attribute>
+
                <xml-element java-attribute="projectName" name="project" namespace="http://www.example.com/projects" >
+
                    <xml-element-wrapper name="projects" />
+
                </xml-element>
+
 
             </java-attributes>
 
             </java-attributes>
 
         </java-type>
 
         </java-type>
Line 127: Line 110:
 
{|{{BMTableStyle}}
 
{|{{BMTableStyle}}
 
|-{{BMTHStyle}}
 
|-{{BMTHStyle}}
! Issue#  
+
! Issue #  
 
! Owner  
 
! Owner  
! Description/Notes
+
! Description / Notes
 
|-
 
|-
 
| 1
 
| 1
 
| D.McCann
 
| D.McCann
| Two possible ways to allow a path-based mapping to be configured are being considered:  <code>xml-attribute/xml-element</code> or <code>xml-element-wrapper</code>.  Which is preferred?  Design note are located [http://wiki.eclipse.org/EclipseLink/DesignDocs/293925/PathBasedMappings#Decision_Point_1:__xml-attribute.2Fxml-element_vs._xml-element-wrapper here].
+
| Two possible ways to allow a path-based mapping to be configured are being considered:  <code>xml-attribute/xml-element</code> or <code>xml-element-wrapper</code>.  Which is preferred?  Design documentation for this support is located [http://wiki.eclipse.org/EclipseLink/DesignDocs/293925/PathBasedMappings#Decision_Point_1:__xml-attribute.2Fxml-element_vs._xml-element-wrapper here].
 
|-
 
|-
 
| 2
 
| 2
 
| D.McCann
 
| D.McCann
| Three possible ways to set the path for a mapping are being considered:  <code>name</code> overload vs. <code>xpath</code> vs. <code>name</code> + <code>grouping-element</code>.  Which is preferred?  Design notes are located [http://wiki.eclipse.org/EclipseLink/DesignDocs/293925/PathBasedMappings#Decision_Point_2:__name_overload_vs._xpath_vs._name_.2B_grouping-element here].
+
| Three possible ways to set the path for a mapping are being considered:  <code>name</code> overload vs. <code>xpath</code> vs. <code>name</code> + <code>grouping-element</code>.  Which is preferred?  Design documentation for this support is located [http://wiki.eclipse.org/EclipseLink/DesignDocs/293925/PathBasedMappings#Decision_Point_2:__name_overload_vs._xpath_vs._name_.2B_grouping-element here].
|-
+
| 3
+
| D.McCann
+
| What is the expected behavior when a namespace is set on an <code>xml-element-wrapper</code> that has a path set?
+
 
|}
 
|}
  
Line 150: Line 129:
 
{|{{BMTableStyle}}
 
{|{{BMTableStyle}}
 
|-{{BMTHStyle}}
 
|-{{BMTHStyle}}
! Issue#  
+
! Issue #  
! Description/Notes  
+
! Description / Notes  
 
! Decision
 
! Decision
 
|-
 
|-
| 1
+
|  
| Two possible ways to allow a path-based mapping to be configured are being considered: <code>xml-attribute/xml-element</code> or <code>xml-element-wrapper</code>
+
|  
| <code>xml-element-wrapper</code> will be extended to handle multi-level paths, and enabled for use with <code>xml-attribute</code> and single-valued properties.
+
|  
|-
+
| 2
+
| Three possible ways to set the path for a mapping are being considered: <code>name</code> overload vs. <code>xpath</code> vs. <code>name</code> + <code>grouping-element</code>
+
| <code>name</code> will be overloaded.
+
 
|}
 
|}
 
== Future Considerations ==
 
 
During the research for this project the following items were identified as out of scope but are captured here as potential future enhancements. If agreed upon during the review process these should be logged in the bug system.
 
* For issue #2 above, it may be useful to add an additional attribute such that users who do not wish use the <code>name</code> attribute in a non-standard way are able to set a multi-level path.
 

Revision as of 09:55, 8 February 2010

XMLDirectMapping (page under construction)

Requirements

Provide support for XML direct mappings.

The following structures are to be extended to support XML direct mapping configuration:

  • xml-attribute
  • xml-element

Path-based mappings must be supported.

The following should be configurable:

  • Null policy
  • Get/set method names
  • Read only
  • Attribute classification
  • Default null value
  • CDATA
  • Converter

Example

The following example will demonstrate how to configure XML direct mappings via XML metadata.

org.example.Employee.java

package org.example;
 
public class Employee {
    public int empId;
    public String firstName;
    public String lastName;
    public String projectName;
}

Deployment XML

<class-mapping-descriptor xsi:type="xml-class-mapping-descriptor">
    <alias>Employee</alias>
    <attribute-mappings>
        <attribute-mapping xsi:type="xml-direct-mapping">
           <attribute-name>empId</attribute-name>
           <field name="@id" xsi:type="node"/>
        </attribute-mapping>
        <attribute-mapping xsi:type="xml-direct-mapping">
           <attribute-name>firstName</attribute-name>
           <field name="first-name/text()" xsi:type="node"/>
        </attribute-mapping>
        <attribute-mapping xsi:type="xml-direct-mapping">
           <attribute-name>lastName</attribute-name>
           <field name="last-name/text()" xsi:type="node"/>
        </attribute-mapping>
        <attribute-mapping xsi:type="xml-direct-mapping">
           <attribute-name>projectName</attribute-name>
           <field name="prj:project/text()" xsi:type="node"/>
        </attribute-mapping>
    <attribute-mappings>
    <descriptor-type>aggregate</descriptor-type>
    <default-root-element>employee</default-root-element>
    <default-root-element-field name="employee" xsi:type="node"/>
    <namespace-resolver>
        <namespaces>
            <namespace>
                <prefix>prj</prefix>
                <namespace-uri>http://www.example.com/projects</namespace-uri>
            </namespace>
        </namespaces>
        <default-namespace-uri>http://www.example.com/employees</default-namespace-uri>
    </namespace-resolver>
</class-mapping-descriptor>

XML Instance Document

<?xml version="1.0" encoding="UTF-8"?>
<employee id="66" xmlns="http://www.example.com/employees" xmlns:prj="http://www.example.com/projects">
    <first-name>Joe</first-name>
    <last-name>Black</last-name>
    <prj:project>XML External Metadata Support</prj:project>
</employee>

org/example/eclipselink-oxm.xml

This XML file demonstrates configuring XML direct mappings on the "org.example.Employee" class.

<?xml version="1.0" encoding="US-ASCII"?>
<xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm">
    <xml-schema namespace="http://www.example.com/employees">
        <xml-ns namespace-uri="http://www.example.com/projects" prefix="prj"/>
    </xml-schema>
    <java-types>
        <java-type name="org.example.Employee">
            <xml-root-element name="employee" />
            <java-attributes>
                <xml-attribute java-attribute="empId" name="id" />
                <xml-element java-attribute="firstName" name="first-name" />
                <xml-element java-attribute="lastName" name="last-name" />
                <xml-element java-attribute="projectName" name="prj:project" />
            </java-attributes>
        </java-type>
    </java-types>
</xml-bindings>

Open Issues

This section lists the open issues that are still pending that must be decided prior to fully implementing this project's requirements.

Issue # Owner Description / Notes
1 D.McCann Two possible ways to allow a path-based mapping to be configured are being considered: xml-attribute/xml-element or xml-element-wrapper. Which is preferred? Design documentation for this support is located here.
2 D.McCann Three possible ways to set the path for a mapping are being considered: name overload vs. xpath vs. name + grouping-element. Which is preferred? Design documentation for this support is located here.

Decisions

This section lists decisions made. These are intended to document the resolution of open issues or constraints added to the project that are important.

Issue # Description / Notes Decision

Back to the top