2011-07-24 21 views
5

Cuando uso @XmlSchema(attributeFormDefault = XmlNsForm.QUALIFIED, ...)JAXB: atributos calificados deshabilita el espacio de nombres predeterminado xmlns = ""?

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

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

y en lugar de:

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

genera algo como:

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

¿Es esto un comportamiento esperado? ¿Hay alguna manera de corregir esto?

Respuesta

3

EclipseLink JAXB (MOXy) está manejando la calificación de prefijo para los elementos de forma diferente dependiendo de la calificación de la forma del atributo (como se muestra a continuación).

La calificación del espacio de nombres no es incorrecta, pero acepto que el uso del espacio de nombres predeterminado es mejor cuando es posible. Puede hacer un seguimiento de los progresos en este tema con el siguiente fallo:

Un

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

} 

demostración

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

} 

paquete de información-sin attributeFormDefault establece

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

import javax.xml.bind.annotation.*; 

Salida:

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

paquete de información con attributeFormDefault conjunto

@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.*; 

Salida:

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

Gracias para confirmar el problema. –

Cuestiones relacionadas