2013-06-07 13 views
16

Ich erstelle eine XML-Datei-Struktur, deren Wurzel elemenet shuould wie:Hinzufügen von Namespaces Elemente xml zu verankern jaxb mit

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

i package-info.java Klasse erstellt, aber ich kann nur ein Namensraum durch Schreiben erhalten Dieser Code:

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

Irgendeine Idee?

+1

schema sollten Paare von ' "{namespace} {Schema uri}" sein': 'xsi: schemaLocation = "http://www.example.com http://www.example.com/abc.xsd" ' – DLight

Antwort

23

Im Folgenden finden Sie einen Democode, der das von Ihnen gesuchte XML erzeugt. Sie können die Marshaller.JAXB_SCHEMA_LOCATION-Eigenschaft verwenden, um die schemaLocation anzugeben. Dadurch wird der Namespace http://www.w3.org/2001/XMLSchema-instance automatisch deklariert.

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

} 

Ausgabe

Unten finden Sie die Ausgabe aus dem Demo-Code ausgeführt wird.

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

Paket-info

Dies ist die package-info Klasse aus Ihrer Frage.

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

import javax.xml.bind.annotation.*; 

RootElement

Im Folgenden finden Sie eine vereinfachte Version Ihrer Domain-Modell:

package myproject.myapp; 

import javax.xml.bind.annotation.XmlRootElement; 

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

}