2009-05-15 14 views
10

Quiero tener JAXB anotado clases que serían marshalled/unmarshalled a diferentes espacios de nombres XML.JAXB: ¿Cómo anoto las clases para que pertenezcan a diferentes espacios de nombres?

Lo que necesito es algo así como:

<someRootElement xmlns="urn:my:ns1" 
    xmlns:a="urn:my:ns2" xmlns:b="urn:my:ns3"> 

    <someElement/> 
    <a:someElement/> 
    <b:someElement/> 

</someRootElement> 

¿Cómo se puede hacer esto?

¿Se puede hacer programáticamente? (sin la necesidad de fijaciones .xjb de JAXB archivo?)

Respuesta

12
@XmlRootElement(name="someRootElement", namespace = "urn:my:ns1") 
class Test { 
    @XmlElement(name="someElement", namespace="urn:my:ns1") 
    String elem1 = "One"; 

    @XmlElement(name="someElement", namespace="urn:my:ns2") 
    String elem2 = "Two"; 

    @XmlElement(name="someElement", namespace="urn:my:ns3") 
    String elem3 = "Three"; 
} 

Este mariscales en el siguiente XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<someRootElement xmlns="urn:my:ns1" xmlns:ns2="urn:my:ns2" xmlns:ns3="urn:my:ns3"> 
    <someElement>One</someElement> 
    <ns2:someElement>Two</ns2:someElement> 
    <ns3:someElement>Three</ns3:someElement> 
</someRootElement> 

Si está utilizando JAXB RI y no me gusta el Por defecto ns2 y ns3 prefijos de espacio de nombres, necesita proporcionar su propio NamespacePrefixMapper.

Cuestiones relacionadas