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

EclipseLink/DesignDocs/317962/Phase3

< EclipseLink‎ | DesignDocs‎ | 317962
Revision as of 12:14, 17 August 2010 by David.mccann.oracle.com (Talk | contribs) (Example:)

Phase 3 - MOXy Equavilents of EclipseLink JPA Annotations

This phase of development involves providing additional MOXy annotations and XML metadata support equivalent to that of EclipseLink 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

XmlDiscriminatorNode

Purpose

Provide a means to set the class type indicator 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 type indicator when using inheritance. The value will be in the form of an XPath to an attribute, i.e. @xsi:type.

XML Schema

Following is the proposed XSD change necessary to provide this support:

<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-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 a the class indicator field can be set.

Using the EclipseLink XML metadata tag xml-discriminator-node to set the class indicator field can be accomplished as follows:

<java-type name="org.example.Vehicle" xml-discriminator-column="@vtype">
    <xml-root-element name="vehicle-data" /> 
</java-type>

Setting the Class Extractor via Annotations would be accomplished as follows: org.example.Vehicle.java

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

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