2009-05-15 5 views
10

Je souhaite avoir classes JAXB-annotées qui seraient marshalled/unmarshalled à différents espaces de noms XML.JAXB: Comment annoter des classes pour qu'elles appartiennent à des espaces de noms différents?

Ce que je besoin est quelque chose comme:

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

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

</someRootElement> 

Comment peut-il être fait?

Est-ce que cela peut être fait par programme? (sans la nécessité d'liaisons de .xjb de JAXB fichier?)

Répondre

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

Ce maréchaux dans le code XML suivant:

<?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 vous utilisez JAXB RI et n'aime pas par défaut ns2 et ns3 préfixes d'espace de noms, vous devez fournir votre propre NamespacePrefixMapper.

Questions connexes