2011-07-24 10 views
5

Gdy używam @XmlSchema(attributeFormDefault = XmlNsForm.QUALIFIED, ...)JAXB: Kwalifikowane atrybuty wyłączają domyślną przestrzeń nazw xmlns = ""?

lub @XmlAttribute(namespace = "sample.com/y", ...)

JAXB ignoruje @XmlSchema(namespace = "sample.com/x", ...)

i zamiast:

<a xmlns="sample.com/y" xmlns:ns0="sample.com/y"> 
    <b ns0:att=""/> 
</a> 

generuje coś takiego:

<ns1:a xmlns:ns1="sample.com/x" xmlns:ns0="sample.com/y"> 
    <ns1:b ns0:att=""/> 
</ns1:a> 

Czy jest to oczekiwane zachowanie? Czy istnieje sposób, aby to poprawić?

Odpowiedz

3

EclipseLink JAXB (MOXy) obsługuje kwalifikację prefiksu dla elementów w różny sposób w zależności od kwalifikacji formularza atrybutu (jak pokazano poniżej).

Kwalifikacja przestrzeni nazw nie jest błędna, ale zgadzam się, że użycie domyślnej przestrzeni nazw jest lepsze, jeśli to możliwe. Możesz śledzić postęp w tej kwestii stosując następujący błąd:

package forum6808921; 

import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement 
public class A { 

    private String b; 

    public String getB() { 
     return b; 
    } 

    public void setB(String b) { 
     this.b = b; 
    } 

} 

Demo

package forum6808921; 

import javax.xml.bind.JAXBContext; 
import javax.xml.bind.Marshaller; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     JAXBContext jc = JAXBContext.newInstance(A.class); 

     A a = new A(); 
     a.setB("Hello World"); 

     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.marshal(a, System.out); 
    } 

} 

pakiet-info bez attributeFormDefault ustawić

@XmlSchema(
     namespace = "sample.com/x" 
     , elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED 
     ) 
package forum6808921; 

import javax.xml.bind.annotation.*; 

wyjściowa:

<?xml version="1.0" encoding="UTF-8"?> 
<a xmlns="sample.com/x"> 
    <b>Hello World</b> 
</a> 

pakiet-info z attributeFormDefault ustawić

@XmlSchema(
     namespace = "sample.com/x" 
     , elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED 
     , attributeFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED 
     ) 
package forum6808921; 

import javax.xml.bind.annotation.*; 

wyjściowa:

<?xml version="1.0" encoding="UTF-8"?> 
<ns0:a xmlns:ns0="sample.com/x"> 
    <ns0:b>Hello World</ns0:b> 
</ns0:a> 
+0

Dzięki za potwierdzające ten problem. –

Powiązane problemy