Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Adding namespaces to root element of xml using jaxb

Tags:

I am creating an xml file whose root elemenet structure shuould be like:

   <RootElement xmlns="http://www.mysite.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mysite.com/abc.xsd"> 

i created package-info.java class but i can get only one namespace by writing this code:

@XmlSchema(         namespace = "http://www.mysite.com",         elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) package myproject.myapp; import javax.xml.bind.annotation.XmlSchema; 

Any idea?

like image 238
Aquarius24 Avatar asked Jun 07 '13 08:06

Aquarius24


People also ask

How do you add a namespace to an XML element?

XML Namespaces - The xmlns Attribute When using prefixes in XML, a namespace for the prefix must be defined. The namespace can be defined by an xmlns attribute in the start tag of an element. The namespace declaration has the following syntax. xmlns:prefix="URI".

Which tag represents the root element for the XML document in JAXB?

JAXB @XmlRootElement annotation type @XmlRootElement maps a class or an enum type to an XML element. When a top level class or an enum type is annotated with the @XmlRootElement annotation, then its value is represented as XML element in an XML document.

Can an XML schema define namespaces?

One of the primary motivations for defining an XML namespace is to avoid naming conflicts when using and re-using multiple vocabularies. XML Schema is used to create a vocabulary for an XML instance, and uses namespaces heavily.


1 Answers

Below is some demo code that will produce the XML you are looking for. You can use the Marshaller.JAXB_SCHEMA_LOCATION property to specify the schemaLocation this will cause the http://www.w3.org/2001/XMLSchema-instance namespace to be automatically declared.

Demo

package myproject.myapp;  import javax.xml.bind.*;  public class Demo {      public static void main(String[] args) throws Exception {         JAXBContext jc = JAXBContext.newInstance(RootElement.class);          RootElement rootElement = new RootElement();          Marshaller marshaller = jc.createMarshaller();         marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);         marshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, "http://www.mysite.com/abc.xsd");         marshaller.marshal(rootElement, System.out);     }  } 

Output

Below is the output from running the demo code.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <RootElement xmlns="http://www.mysite.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.mysite.com/abc.xsd"/> 

package-info

This is the package-info class from your question.

@XmlSchema(     namespace = "http://www.mysite.com",     elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED ) package myproject.myapp;  import javax.xml.bind.annotation.*; 

RootElement

Below is a simplified version of your domain model:

package myproject.myapp;  import javax.xml.bind.annotation.XmlRootElement;  @XmlRootElement(name="RootElement") public class RootElement {  } 
like image 88
bdoughan Avatar answered Oct 25 '22 16:10

bdoughan