2010-07-28 5 views
0

J'ai cette classe défintion:Comment renommer des attributs XML à partir de classes Java à l'aide d'annotations JAXB?

@XmlRootElement 
public class RssRoot { 

private String _version; 

private String _xmlns_content; 

@XmlAttribute() 
public String get_version() { 
    return _version; 
} 

@XmlAttribute() 
public String get_xmlns_content() { 
    return _xmlns_content; 
} 

public void set_version(String version) { 
    _version = version; 
} 

public void set_xmlns_content(String xmlnsContent) { 
    _xmlns_content = xmlnsContent; 
} 

public RssRoot() { 
    super(); 

    this._version = "2.0"; 
    this._xmlns_content = "http://purl.org/rss/1.0/modules/content/"; 
} 

} 

Et il génère ce xml:

<rssRoot xmlnsContent="http://purl.org/rss/1.0/modules/content/" version="2.0"/> 

Cependant, je dois renommer xmlnsContent à xmlns:content et rssRoot, à rss. Comment puis-je faire ceci?

J'ai essayé avec @XmlAttribute(name = "xmlns:content") au-dessus du getter et près de la déclaration de propriété, mais pas de chance. La chose échoue avec ce message:

Racine trace de la pile d'exception: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 compte de IllegalAnno tationExceptions classe a deux propriétés du même nom « _xmlns_content " ce problème est lié à l'emplacement suivant: RssRoot

Que puis-je faire d'autre?

Répondre

2

Il peut être préférable d'utiliser les bibliothèques existantes pour le support RSS (telles que ROME) au lieu de créer les vôtres.

Mais si vous voulez vraiment:

  • xmlns:content est pas un attribut, il est une déclaration d'espace de noms. JAXB l'ajoute automatiquement au XML résultant lorsque le XML résultant contient des éléments dans cet espace de noms (l'espace de noms des éléments peut être spécifié en utilisant l'attribut namespace dans @XmlElement, @XmlRootElement, etc.). Pour renommer rssRoot en rss, écrire @XmlRootElement(name = "rss").

Questions connexes