如何使用JAXB注释从Java类重命名XML属性?

时间:2010-07-28 16:17:36

标签: java xml 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/";
 }

}

它会生成这个xml:

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

但是,我需要将xmlnsContent重命名为xmlns:content,将rssRoot重命名为rss。我怎么能这样做?

我尝试使用@XmlAttribute(name = "xmlns:content")在吸气剂上方并靠近物业声明,但没有运气。事情失败了这条消息:

  

Root异常堆栈跟踪:       com.sun.xml.bind.v2.runtime.IllegalAnnotationsException:IllegalAnno的1个计数       tationExceptions       类有两个同名的属性“_xmlns_content”               此问题与以下位置有关:RssRoot

我还能做什么?

1 个答案:

答案 0 :(得分:2)

最好使用现有的库来支持RSS(例如ROME),而不是创建自己的库。

但如果你真的想要:

  • xmlns:content不是属性,它是名称空间声明。当结果XML包含该命名空间中的元素时,JAXB会自动将其添加到生成的XML中(可以使用namespace@XmlElement等中的@XmlRootElement属性指定元素的命名空间。

  • 要将rssRoot重命名为rss,请写下@XmlRootElement(name = "rss")