Jump to: navigation, search

Difference between revisions of "EclipseLink/UserGuide/MOXy/Type Level/Setting Up Namespace Information"

(Package Level)
Line 17: Line 17:
  
 
In most cases, package-level annotation is sufficient. You can use the other levels to customize your document. Use the the <tt>@XmlSchema</tt> annotation to specify the namespace.
 
In most cases, package-level annotation is sufficient. You can use the other levels to customize your document. Use the the <tt>@XmlSchema</tt> annotation to specify the namespace.
 +
  
 
== Package Level ==
 
== Package Level ==
Line 42: Line 43:
 
All elements are qualified with the "<tt><nowiki>http://www.example.org/package</nowiki></tt>" namespace.
 
All elements are qualified with the "<tt><nowiki>http://www.example.org/package</nowiki></tt>" namespace.
  
==Type Level==
+
 
 +
== Type Level ==
 +
 
 
Type level annotations will override the package level namespace.
 
Type level annotations will override the package level namespace.
  
 
<source lang="java">
 
<source lang="java">
package example;
 
 
import javax.xml.bind.annotation.XmlAttribute;
 
import javax.xml.bind.annotation.XmlRootElement;
 
import javax.xml.bind.annotation.XmlType;
 
 
 
@XmlRootElement
 
@XmlRootElement
 
@XmlType(namespace="http://www.example.org/type")
 
@XmlType(namespace="http://www.example.org/type")
 
public class Customer {
 
public class Customer {
+
  private String name;
    private long id;
+
  private String account;
    private String name;
+
+
    @XmlAttribute
+
    public long getId() {
+
        return id;
+
    }
+
+
    public void setId(long id) {
+
        this.id = id;
+
    }
+
+
    public String getName() {
+
        return name;
+
    }
+
+
    public void setName(String name) {
+
        this.name = name;
+
    }
+
+
 
}
 
}
 
</source>
 
</source>
Line 82: Line 60:
  
 
<source lang="xml">
 
<source lang="xml">
<ns2:customer
+
<ns2:customer xmlns="http://www.example.org/type" xmlns:ns2="http://www.example.org/package">
    xmlns="http://www.example.org/type"
+
    xmlns:ns2="http://www.example.org/package"
+
    id="123">
+
 
     <name>Jane Doe</name>
 
     <name>Jane Doe</name>
 +
    <account>36328721</account>
 
</ns2:customer>
 
</ns2:customer>
 
</source>
 
</source>
  
Only elements inside the '''Customer''' type are qualified with the '''http://www.example.org/type''' namespace.
+
Only elements inside the <tt>Customer</tt> type are qualified with the "<tt><nowiki>http://www.example.org/type</nowiki></tt>" namespace.
  
  
==Field/Property Level==
+
== Field/Property Level ==
 
You can override the package or type namespaces at the property/field level. All attribute and element annotations accept the '''namespace''' parameter.
 
You can override the package or type namespaces at the property/field level. All attribute and element annotations accept the '''namespace''' parameter.
  

Revision as of 16:11, 6 January 2011

EclipseLink MOXy

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

Elug api package icon.png Key API

Setting Up Namespace Information

Most XML documents are qualified with a namespace. You can namespace-qualify elements of your Java class at the following levels:

  • Package
  • Type
  • Field / Property

In most cases, package-level annotation is sufficient. You can use the other levels to customize your document. Use the the @XmlSchema annotation to specify the namespace.


Package Level

Use the @XmlSchema annotation on the package to set a default namespace and specify that all elements in the package are qualified with the namespace. This information is specified in a special Java source file, package-info.java.

@XmlSchema(
   namespace="http://www.example.org/package",
   elementFormDefault=XmlNsForm.QUALIFIED)
package example;
 
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

This will produce the following XML:

<customer xmlns="http://www.example.org/package">
   <name>Jane Doe</name>
</customer>

All elements are qualified with the "http://www.example.org/package" namespace.


Type Level

Type level annotations will override the package level namespace.

@XmlRootElement
@XmlType(namespace="http://www.example.org/type")
public class Customer {
   private String name;
   private String account;
}

This will produce the following XML:

<ns2:customer xmlns="http://www.example.org/type" xmlns:ns2="http://www.example.org/package">
    <name>Jane Doe</name>
    <account>36328721</account>
</ns2:customer>

Only elements inside the Customer type are qualified with the "http://www.example.org/type" namespace.


Field/Property Level

You can override the package or type namespaces at the property/field level. All attribute and element annotations accept the namespace parameter.

package example;
 
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
 
@XmlRootElement
@XmlType(namespace="http://www.example.org/type")
public class Customer {
 
    private long id;
    private String name;
 
    @XmlAttribute
    public long getId() {
        return id;
    }
 
    public void setId(long id) {
        this.id = id;
    }
 
    @XmlElement(namespace="http://www.example.org/property")
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
}

This will produce the following XML:

<ns2:customer
    xmlns="http://www.example.org/property"
    xmlns:ns2="http://www.example.org/package"
    id="123">
    <name>Jane Doe</name>
</ns2:customer>

The Name element is qualified with the http://www.example.org/property namespace.


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