2013-06-07 13 views
16

sto creando un file XML la cui struttura principale elemenet shuould essere come:namespace Aggiunta di radicare elemento di XML usando JAXB

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

ho creato classe package-info.java ma posso ottenere un solo spazio dei nomi per la scrittura questo codice:

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

Qualche idea?

+1

schemaLocation dovrebbe essere coppie di ' "{namespace} {schema uri}"': 'xsi: schemaLocation = "http://www.example.com http://www.example.com/abc.xsd" ' – DLight

risposta

23

Di seguito è riportato un codice dimostrativo che produrrà l'XML che si sta cercando. È possibile utilizzare la proprietà Marshaller.JAXB_SCHEMA_LOCATION per specificare lo schemaLocation in modo che lo spazio dei nomi http://www.w3.org/2001/XMLSchema-instance venga dichiarato automaticamente.

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

} 

uscita

Di seguito si riporta l'uscita dalla esecuzione del codice 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"/> 

pacchetto-info

Questa è la classe package-info dalla tua domanda.

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

import javax.xml.bind.annotation.*; 

RootElement

Qui di seguito è una versione semplificata del modello di dominio:

package myproject.myapp; 

import javax.xml.bind.annotation.XmlRootElement; 

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

}