[英]JAXB abstract class with @XmlTransient
我正在使用JAXB將一些xml解組到一個對象中。
我有一個從抽象類繼承的類。 我已將抽象類標記為@XmlTransient。 然后,使用XMLType PropOrder可以訪問抽象類中的屬性,如下所示:
@XmlType( propOrder = { "id"...
涼。 問題是有時它不是我要訪問的元素,而是一個屬性。 通常,您可以使用@XMLAttribute定義此類屬性,以指示該值存儲在xml屬性中而不是元素中。 但是考慮到我已經在定義“ id”的抽象類上使用過XMLTransient的事實,當我嘗試將字段標記為@XMLAttribute時,JAXB會抱怨。
JAXB抱怨我試圖訪問/返回兩個具有相同名稱的字段。
誰能指出我正確的方向? 我正在為GAE進行開發,因此我真的不想使用任何其他庫。
提前致謝!
以下是您可以做的幾件事:
富
您可以使用@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
對其進行@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"/>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.