我正在使用JAXB将一些xml解组为一个对象。
我有一个继承自抽象类的类。我将抽象类标记为@XmlTransient。然后使用XMLType PropOrder,我可以访问抽象类中的属性,如下所示:
@XmlType( propOrder = { "id"...
冷却。问题有时它不是我想要访问的元素而是属性。通常,您将使用@XMLAttribute定义此类属性,以指示该值存储在xml属性中而不是元素中。但鉴于我已经在定义了'id'的抽象类上使用了XMLTransient,当我尝试将该字段标记为@XMLAttribute时,JAXB会抱怨。
JAXB抱怨我正在尝试访问/返回两个具有相同名称的字段。
任何人都可以指出我正确的方向吗?我正在为GAE构建,所以我真的不想使用任何其他库。
提前致谢!
答案 0 :(得分:2)
以下是您可以做的几件事:
<强>富强>
您可以使用@XmlAttribute
在父类上注释属性。
import javax.xml.bind.annotation.*;
@XmlTransient
public class Foo {
private String att1;
private String att2;
@XmlAttribute
public String getAtt1() {
return att1;
}
public void setAtt1(String att1) {
this.att1 = att1;
}
public String getAtt2() {
return att2;
}
public void setAtt2(String att2) {
this.att2 = att2;
}
}
<强>酒吧强>
您可以覆盖子类上的属性,并使用@XmlAttribute
注释它。
import javax.xml.bind.annotation.*;
@XmlRootElement
public class Bar extends Foo {
@Override
@XmlAttribute
public String getAtt2() {
return super.getAtt2();
}
@Override
public void setAtt2(String att2) {
super.setAtt2(att2);
}
}
<强>演示强>
以下是一些可以运行的演示代码,以显示一切正常。
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Bar.class);
Bar bar = new Bar();
bar.setAtt1("a");
bar.setAtt2("b");
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(bar, System.out);
}
}
<强>输出强>
以下是运行演示代码的输出:
<?xml version="1.0" encoding="UTF-8"?>
<bar att1="a" att2="b"/>