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/Phase10"

(org/example/eclipselink-oxm.xml)
 
(28 intermediate revisions by the same user not shown)
Line 1: Line 1:
= Phase 10 - XmlRegistry (page under construction) =
+
<div style="border: 1px solid rgb(0, 0, 0); margin: 5px; padding: 5px; float: right;">__TOC__</div>
 +
= Phase 10 - XmlRegistry =
  
Provide support for ObjectFactory methods.
+
Provide support for <code>ObjectFactory</code> methods.
  
 
== Annotations  ==
 
== Annotations  ==
Line 7: Line 8:
 
The following annotations will be targetted in this phase:  
 
The following annotations will be targetted in this phase:  
  
{| border="1" style="width: 100%;" class="wikitable"
+
{|{{BMTableStyle}}
|+ <br>
+
|-{{BMTHStyle}}
|-
+
 
! Annotation  
 
! Annotation  
 +
! XML Metadata Tag
 
! Package  
 
! Package  
 
! Type  
 
! Type  
Line 16: Line 17:
 
! Method
 
! Method
 
|-
 
|-
| [http://java.sun.com/javase/6/docs/api/javax/xml/bind/annotation/XmlElementDecl.html XmlElementDecl<br>]  
+
| [http://java.sun.com/javase/6/docs/api/javax/xml/bind/annotation/XmlElementDecl.html XmlElementDecl]  
| &nbsp;  
+
| xml-element-decl
| &nbsp;  
+
| align="center" | &nbsp;  
| X
+
| align="center" | &nbsp;  
| X
+
| align="center" | X  
 +
| align="center" | X
 
|-
 
|-
| [http://java.sun.com/javase/6/docs/api/javax/xml/bind/annotation/XmlRegistry.html XmlRegistry<br>]  
+
| [http://java.sun.com/javase/6/docs/api/javax/xml/bind/annotation/XmlRegistry.html XmlRegistry]  
| &nbsp;  
+
| xml-registry
| X  
+
| align="center" | &nbsp;  
| &nbsp;
+
| align="center" | X  
| &nbsp;
+
| align="center" | &nbsp;  
 +
| align="center" | &nbsp;
 
|}
 
|}
 +
 +
== Example: XmlRegistry and XmlElementDecl Annotations - Factory method==
 +
 +
=== Java Metadata  ===
 +
 +
The following example will demonstrate how the [http://java.sun.com/javase/6/docs/api/javax/xml/bind/annotation/XmlRegistry.html XmlRegistry] and [http://java.sun.com/javase/6/docs/api/javax/xml/bind/annotation/XmlElementDecl.html XmlElementDecl] annotations can be applied:
 +
 +
==== org.example.ObjectFactory.java  ====
 +
 +
<source lang="java">
 +
package org.example;
 +
 +
import javax.xml.bind.JAXBElement;
 +
import javax.xml.bind.annotation.XmlElementDecl;
 +
import javax.xml.bind.annotation.XmlRegistry;
 +
import javax.xml.namespace.QName;
 +
 +
@XmlRegistry
 +
class ObjectFactory {
 +
    @XmlElementDecl(name="foo")
 +
    public JAXBElement<String> createFoo(String s) {
 +
        return new JAXBElement<String>(new QName("foo"), String.class, s);
 +
    }
 +
}
 +
</source>
 +
 +
=== XML Metadata  ===
 +
 +
==== xml-registry  ====
 +
 +
If this is present in XML, the corresponding Java class will be treated as an Object Factory.
 +
 +
==== xml-element-decl  ====
 +
 +
If this is present in XML, the corresponding annotation will be completely replaced.
 +
 +
==== org/example/eclipselink-oxm.xml  ====
 +
 +
This XML file represents metadata overrides for the <code>org.example</code> package.
 +
 +
<source lang="xml">
 +
<?xml version="1.0" encoding="US-ASCII"?>
 +
<xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm">
 +
    <xml-registries>
 +
        <xml-registry name="org.example.ObjectFactory">
 +
            <xml-element-decl java-method="createFoo" name="foo" />
 +
        </xml-registry>
 +
    </xml-registries>
 +
</xml-bindings>
 +
</source>
 +
 +
== Example: XmlRegistry and XmlElementDecl Annotations - Element declaration with non local scope ==
 +
 +
=== Java Metadata  ===
 +
 +
The following example will demonstrate how the [http://java.sun.com/javase/6/docs/api/javax/xml/bind/annotation/XmlRegistry.html XmlRegistry] and [http://java.sun.com/javase/6/docs/api/javax/xml/bind/annotation/XmlElementDecl.html XmlElementDecl] annotations can be applied in the case where one or more <code>xml-element-decl</code> declarations define a non-local scope:
 +
 +
==== org.example.ObjectFactory.java  ====
 +
 +
<source lang="java">
 +
package org.example;
 +
 +
import javax.xml.bind.JAXBElement;
 +
import javax.xml.bind.annotation.XmlElementDecl;
 +
import javax.xml.bind.annotation.XmlRegistry;
 +
import javax.xml.namespace.QName;
 +
 +
@XmlRegistry
 +
public class ObjectFactory {
 +
    @XmlElementDecl(scope=FooBar.class, name="foo")
 +
    public JAXBElement<String> createFooBarFoo(String s) {
 +
        return new JAXBElement<String>(new QName("foo"), String.class, FooBar.class, s);
 +
    }
 +
 +
    @XmlElementDecl(scope=FooBar.class, name="bar")
 +
    public JAXBElement<String> createFooBarBar(String s) {
 +
        return new JAXBElement<String>(new QName("bar"), String.class, FooBar.class, s);
 +
    }
 +
 +
    @XmlElementDecl(name="foos")
 +
    public JAXBElement<Integer> createFoos(Integer i) {
 +
        return new JAXBElement<Integer>(new QName("foos"), Integer.class, i);
 +
    }
 +
</source>
 +
 +
==== org.example.FooBar.java  ====
 +
 +
<source lang="java">
 +
package org.example;
 +
 +
import javax.xml.bind.annotation.XmlElementRef;
 +
import javax.xml.bind.annotation.XmlElementRefs;
 +
import javax.xml.bind.JAXBElement;
 +
 +
class FooBar {
 +
    @XmlElementRefs({
 +
        @XmlElementRef(name="foo",type=JAXBElement.class),
 +
        @XmlElementRef(name="bar",type=JAXBElement.class)
 +
    })
 +
    public List<JAXBElement<String>> fooOrBar;
 +
}
 +
</source>
 +
 +
=== XML Metadata  ===
 +
 +
==== xml-registry  ====
 +
 +
If this is present in XML, the corresponding Java class will be treated as an Object Factory.
 +
 +
==== xml-element-decl  ====
 +
 +
If this is present in XML, the corresponding annotation will be completely replaced.
 +
 +
==== org/example/eclipselink-oxm.xml  ====
 +
 +
This XML file represents metadata overrides for the <code>org.example</code> package.
 +
 +
<source lang="xml">
 +
<?xml version="1.0" encoding="US-ASCII"?>
 +
<xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm">
 +
    <xml-registries>
 +
        <xml-registry name="org.example.ObjectFactory">
 +
            <xml-element-decl java-method="createFooBarFoo" name="foo" scope="org.example.FooBar" />
 +
            <xml-element-decl java-method="createFooBarBar" name="bar" scope="org.example.FooBar" />
 +
            <xml-element-decl java-method="createFoos" name="foos" />
 +
        </xml-registry>
 +
    </xml-registries>
 +
    <java-types>
 +
        <java-type name="org.example.FooBar">
 +
            <java-attributes>
 +
                <xml-element-refs java-attribute="fooOrBar" >
 +
                    <xml-element-ref name="foo" type="javax.xml.bind.JAXBElement" />
 +
                    <xml-element-ref name="bar" type="javax.xml.bind.JAXBElement" />
 +
                </xml-element-refs>
 +
            </java-attributes>
 +
        </java-type>
 +
    </java-types>
 +
</xml-bindings>
 +
</source>

Latest revision as of 09:49, 27 January 2010

Phase 10 - XmlRegistry

Provide support for ObjectFactory methods.

Annotations

The following annotations will be targetted in this phase:

Annotation XML Metadata Tag Package Type Field Method
XmlElementDecl xml-element-decl     X X
XmlRegistry xml-registry   X    

Example: XmlRegistry and XmlElementDecl Annotations - Factory method

Java Metadata

The following example will demonstrate how the XmlRegistry and XmlElementDecl annotations can be applied:

org.example.ObjectFactory.java

package org.example;
 
import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.XmlElementDecl;
import javax.xml.bind.annotation.XmlRegistry;
import javax.xml.namespace.QName;
 
@XmlRegistry
class ObjectFactory {
    @XmlElementDecl(name="foo")
    public JAXBElement<String> createFoo(String s) {
        return new JAXBElement<String>(new QName("foo"), String.class, s);
    }
}

XML Metadata

xml-registry

If this is present in XML, the corresponding Java class will be treated as an Object Factory.

xml-element-decl

If this is present in XML, the corresponding annotation will be completely replaced.

org/example/eclipselink-oxm.xml

This XML file represents metadata overrides for the org.example package.

<?xml version="1.0" encoding="US-ASCII"?>
<xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm">
    <xml-registries>
        <xml-registry name="org.example.ObjectFactory">
            <xml-element-decl java-method="createFoo" name="foo" />
        </xml-registry>
    </xml-registries>
</xml-bindings>

Example: XmlRegistry and XmlElementDecl Annotations - Element declaration with non local scope

Java Metadata

The following example will demonstrate how the XmlRegistry and XmlElementDecl annotations can be applied in the case where one or more xml-element-decl declarations define a non-local scope:

org.example.ObjectFactory.java

package org.example;
 
import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.XmlElementDecl;
import javax.xml.bind.annotation.XmlRegistry;
import javax.xml.namespace.QName;
 
@XmlRegistry
public class ObjectFactory {
    @XmlElementDecl(scope=FooBar.class, name="foo")
    public JAXBElement<String> createFooBarFoo(String s) {
        return new JAXBElement<String>(new QName("foo"), String.class, FooBar.class, s);
    }
 
    @XmlElementDecl(scope=FooBar.class, name="bar")
    public JAXBElement<String> createFooBarBar(String s) {
        return new JAXBElement<String>(new QName("bar"), String.class, FooBar.class, s);
    }
 
    @XmlElementDecl(name="foos")
    public JAXBElement<Integer> createFoos(Integer i) {
        return new JAXBElement<Integer>(new QName("foos"), Integer.class, i);
    }

org.example.FooBar.java

package org.example;
 
import javax.xml.bind.annotation.XmlElementRef;
import javax.xml.bind.annotation.XmlElementRefs;
import javax.xml.bind.JAXBElement;
 
class FooBar {
    @XmlElementRefs({
        @XmlElementRef(name="foo",type=JAXBElement.class),
        @XmlElementRef(name="bar",type=JAXBElement.class)
    })
    public List<JAXBElement<String>> fooOrBar;
}

XML Metadata

xml-registry

If this is present in XML, the corresponding Java class will be treated as an Object Factory.

xml-element-decl

If this is present in XML, the corresponding annotation will be completely replaced.

org/example/eclipselink-oxm.xml

This XML file represents metadata overrides for the org.example package.

<?xml version="1.0" encoding="US-ASCII"?>
<xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm">
    <xml-registries>
        <xml-registry name="org.example.ObjectFactory">
            <xml-element-decl java-method="createFooBarFoo" name="foo" scope="org.example.FooBar" />
            <xml-element-decl java-method="createFooBarBar" name="bar" scope="org.example.FooBar" />
            <xml-element-decl java-method="createFoos" name="foos" />
        </xml-registry>
    </xml-registries>
    <java-types>
        <java-type name="org.example.FooBar">
            <java-attributes>
                <xml-element-refs java-attribute="fooOrBar" >
                    <xml-element-ref name="foo" type="javax.xml.bind.JAXBElement" />
                    <xml-element-ref name="bar" type="javax.xml.bind.JAXBElement" />
                </xml-element-refs>
            </java-attributes>
        </java-type>
    </java-types>
</xml-bindings>

Back to the top