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/317962/Phase3"

(Example:)
(Example:)
Line 108: Line 108:
 
<java-types>
 
<java-types>
 
     <java-type name="org.example.Vehicle" xml-discriminator-node="@vtype" xml-discriminator-value="vehicle">
 
     <java-type name="org.example.Vehicle" xml-discriminator-node="@vtype" xml-discriminator-value="vehicle">
         <xml-root-element name="vehicle-data" />  
+
         <xml-root-element name="vehicle-data" />
 +
        <java-attributes>
 +
            <xml-element java-attribute="topSpeed" name="top-speed" />
 +
        </java-attributes>
 
     </java-type>
 
     </java-type>
 
     <java-type name="org.example.Car" xml-discriminator-value="car">
 
     <java-type name="org.example.Car" xml-discriminator-value="car">
 
         <xml-root-element name="car-data" />  
 
         <xml-root-element name="car-data" />  
    </java-type>
+
        <java-attributes>
    <java-type name="org.example.SportsCar" xml-discriminator-value="sports-car">
+
            <xml-element java-attribute="numberOfDoors" name="number-of-doors" />
        <xml-root-element name="sportscar-data" />  
+
            <xml-element java-attribute="milesPerGallon" name="miles-per-gallon" />
 +
        </java-attributes>
 
     </java-type>
 
     </java-type>
 
</java-types>
 
</java-types>
Line 130: Line 134:
 
     public String model;
 
     public String model;
 
     public String manufacturer;
 
     public String manufacturer;
 +
    @XmlElement(name="top-speed")
 
     public int topSpeed;
 
     public int topSpeed;
 
}
 
}
Line 140: Line 145:
 
@XmlDiscriminatorValue("car")
 
@XmlDiscriminatorValue("car")
 
class Car {
 
class Car {
 +
    @XmlElement(name="number-of-doors")
 
     public int numberOfDoors;
 
     public int numberOfDoors;
 +
 +
    @XmlElement(name="miles-per-gallon")
 
     public int milesPerGallon;
 
     public int milesPerGallon;
 
}
 
}
 
</source>
 
</source>
org.example.SportsCar.java
 
<source lang="java">
 
package org.example;
 
  
@XmlRootElement("sportscar-data")
+
Sample XML Instance Document
@XmlDiscriminatorValue("sports-car")
+
<source lang="xml">
class SportsCar {
+
<vehicle-data vtype="car">
     public String quarterMileTime
+
    <model>Mustang GT</model>
}
+
     <manufacturer>Ford</manufacturer>
 +
    <top-speed>354</top-speed>
 +
    <number-of-doors>2</number-of-doors>
 +
    <miles-per-gallon>26</miles-per-gallon>
 +
</vehicle-data>
 
</source>
 
</source>
  

Revision as of 13:39, 17 August 2010

Phase 3 - MOXy Equavilents of JPA Annotations

This phase of development involves providing additional MOXy annotations and XML metadata support equivalent to that of JPA.

Annotations/XML Metadata

The following MOXy annotations/XML metadata will be targeted in this phase:

MOXy Annotation XML Metadata Tag Package Type Field Method
XmlDiscriminatorNode xml-discriminator-node X
XmlDiscriminatorValue xml-discriminator-value X

Inheritance Support

XmlDiscriminatorNode

Purpose

Provide a means to set the class indicator field name when using inheritance.

Java Metadata

package org.eclipse.persistence.oxm.annotations;
 
@Target({TYPE}) 
@Retention(RUNTIME)
public @interface XmlDiscriminatorNode {
    String value();
}

XML Metadata

xml-discriminator-node

The xml-discriminator-node metadata tag will be used to set the class indicator field name when using inheritance. The value will be in the form of an XPath to an attribute, i.e. @xsi:type.

XmlDiscriminatorValue

Purpose

Provide a means to set a class indicator when using inheritance.

Java Metadata

package org.eclipse.persistence.oxm.annotations;
 
@Target({TYPE}) 
@Retention(RUNTIME)
public @interface XmlDiscriminatorValue {
    String value();
}

XML Metadata

xml-discriminator-value

The xml-discriminator-value metadata tag will be used to set a class indicator when using inheritance.

XML Schema

Following is the proposed XSD change necessary to provide support for inheritance:

<xs:element name="java-type">
    <xs:complexType>
        <xs:all>
            <xs:element ref="xml-type" minOccurs="0"/>
            <xs:element ref="xml-root-element" minOccurs="0"/>
            <xs:element ref="xml-see-also" minOccurs="0"/>
            <xs:element ref="xml-java-type-adapter" minOccurs="0"/>
            <xs:element ref="xml-class-extractor" minOccurs="0"/>
            <xs:element ref="xml-properties" minOccurs="0" />
            <xs:element name="java-attributes" minOccurs="0">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="java-attribute" minOccurs="0" maxOccurs="unbounded" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:all>
        <xs:attribute name="name" type="xs:string" />
        <xs:attribute name="xml-accessor-order" type="xml-access-order" default="UNDEFINED" />
        <xs:attribute name="xml-accessor-type" type="xml-access-type" default="PUBLIC_MEMBER" />
        <xs:attribute name="xml-customizer" type="xs:string" />
        <xs:attribute name="xml-discriminator-node" type="xs:string" />
        <xs:attribute name="xml-discriminator-value" type="xs:string" />
        <xs:attribute name="xml-inline-binary-data" type="xs:boolean" default="false" />
        <xs:attribute name="xml-transient" type="xs:boolean" default="false" />
    </xs:complexType>
</xs:element>

Example:

The following example will demonstrate how inheritance can be configured.

Using the xml-discriminator-node and xml-discriminator-value EclipseLink XML metadata tags to set the class indicator field name and class indicator(s) can be accomplished as follows:

<java-types>
    <java-type name="org.example.Vehicle" xml-discriminator-node="@vtype" xml-discriminator-value="vehicle">
        <xml-root-element name="vehicle-data" />
        <java-attributes>
            <xml-element java-attribute="topSpeed" name="top-speed" />
        </java-attributes>
    </java-type>
    <java-type name="org.example.Car" xml-discriminator-value="car">
        <xml-root-element name="car-data" /> 
        <java-attributes>
            <xml-element java-attribute="numberOfDoors" name="number-of-doors" />
            <xml-element java-attribute="milesPerGallon" name="miles-per-gallon" />
        </java-attributes>
    </java-type>
</java-types>

Setting the class indicator field name and class indicator(s) via Annotations would be accomplished as follows:

org.example.Vehicle.java

package org.example;
 
@XmlRootElement("vehicle-data")
@XmlDiscriminatorNode("@vtype")
@XmlDiscriminatorValue("vehicle")
class Vehicle {
    public String model;
    public String manufacturer;
    @XmlElement(name="top-speed")
    public int topSpeed;
}

org.example.Car.java

package org.example;
 
@XmlRootElement("car-data")
@XmlDiscriminatorValue("car")
class Car {
    @XmlElement(name="number-of-doors")
    public int numberOfDoors;
 
    @XmlElement(name="miles-per-gallon")
    public int milesPerGallon;
}

Sample XML Instance Document

<vehicle-data vtype="car">
    <model>Mustang GT</model>
    <manufacturer>Ford</manufacturer>
    <top-speed>354</top-speed>
    <number-of-doors>2</number-of-doors>
    <miles-per-gallon>26</miles-per-gallon>
</vehicle-data>

Testing

This section identifies the test package(s) for each feature outlined on this page.

XML Metadata

XML Metadata Package

Annotations

Annotation Package

Open Issues

This section lists open issues.

Issue# Description/Notes
1

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.

Decision# Description/Notes Decision
1

Back to the top