Jump to: navigation, search

EclipseLink/UserGuide/MOXy/Type Level/Setting Up Namespace Information

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"<nowiki> namespace. ==Type Level== Type level annotations will override the package level namespace. <source lang="java"> 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; } public String getName() { return name; } public void setName(String name) { this.name = name; } } </source> This will produce the following XML: <source lang="xml"> <ns2:customer xmlns="http://www.example.org/type" xmlns:ns2="http://www.example.org/package" id="123"> <name>Jane Doe</name> </ns2:customer> </source> 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. <source lang="java"> 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; } } </source> This will produce the following XML: <source lang="xml"> <ns2:customer xmlns="http://www.example.org/property" xmlns:ns2="http://www.example.org/package" id="123"> <name>Jane Doe</name> </ns2:customer> </source> The '''Name''' element is qualified with the '''http://www.example.org/property''' namespace. {{EclipseLink_MOXy |previous=[[EclipseLink/UserGuide/MOXy/Type Level/Mapping to a Type or Element/Default Root Element|Default Root Element]] |up=[[EclipseLink/UserGuide/MOXy/Type Level/Mapping to a Type or Element|Mapping to a Type or Element]] |next=[[EclipseLink/UserGuide/MOXy/Type Level/Creating Objects|Creating Objects (Constructors & Factories)]] |version=2.2.0 }}