2013-06-07 20 views
16

tworzę plik xml, którego korzeń elemenet struktura shuould być jak:Dodawanie nazw root element XML przy użyciu JAXB

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

i stworzył klasę package-info.java ale mogę dostać tylko jedną nazw pisząc ten kod:

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

Czy masz pomysł?

+1

schemaLocation powinno być pary ' "{namespace} {schematu URI}"': 'xsi: schemaLocation = "http://www.example.com http://www.example.com/abc.xsd" ' – DLight

Odpowiedz

23

Poniżej znajduje się kod demonstracyjny, który da oczekiwany kod XML. Możesz użyć właściwości Marshaller.JAXB_SCHEMA_LOCATION, aby określić schemaLocation, co spowoduje automatyczne określenie przestrzeni nazw http://www.w3.org/2001/XMLSchema-instance.

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); 
    } 

} 

Wyjście

Poniżej jest wyjście z uruchomieniem kodu demo.

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

pakiet-info

Jest to klasa package-info z Twoim pytaniem.

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

import javax.xml.bind.annotation.*; 

RootElement

Poniżej jest uproszczoną wersją modelu domeny:

package myproject.myapp; 

import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement(name="RootElement") 
public class RootElement { 

}