2009-05-15 6 views
10

Voglio avere classi JAXB annotate che sarebbero marshalled/unmarshalled in diversi spazi dei nomi XML.JAXB: Come annoto le classi in modo che appartengano a spazi dei nomi diversi?

Che cosa ho bisogno è qualcosa di simile:

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

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

</someRootElement> 

Come si può fare?

Può essere programmato? (, senza la necessità diattacchi .xjb di JAXB il file?)

risposta

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

Questo marescialli nel seguente codice 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> 

Se si sta utilizzando JAXB RI e non mi piace il default ns2 e ns3 prefissi dello spazio dei nomi, è necessario fornire il proprio NamespacePrefixMapper.