0
的問題是映射表similiar XML
s到單個類結構:問題與JAXB繼承和@XmlSeeAlso
XML1:<a1><b1 b1Value="xxxx1"/></a1>
XML2:<a2><b2 b2Value="xxxx2"/></a2>
由於遺留代碼,我不能創建因此我必須使用簡單的繼承:
1)class A1
及其子類A2
:
@XmlRootElement(name = "a1")
@XmlSeeAlso(A2.class)
public class A1 {
protected B1 b;
@XmlElement(name = "b1")
public B1 getB() { return b; }
public void setB(B1 b) { this.b = b; }
}
@XmlRootElement(name = "a2")
public class A2 extends A1 {
@XmlElement(name = "b2")
@Override
public B1 getB() { return super.getB(); }
@Override
public void setB(B1 b) { super.setB(b); }
}
2)類B1
和它的子類B2
:
@XmlSeeAlso(B2.class)
public class B1 {
protected String value;
@XmlAttribute(name = "b1Value")
public String getValue() { return value; }
public void setValue(String value) { this.value = value; }
}
public class B2 extends B1 {
@XmlAttribute(name = "b2Value")
@Override
public String getValue() { return super.getValue(); }
@Override
public void setValue(String value) { super.setValue(value); }
}
試圖解析xml2
時,出現問題:
JAXBContext jc = JAXBContext.newInstance(A1.class);
Unmarshaller um = jc.createUnmarshaller();
A1 entity = (A1) um.unmarshal(new StringReader("<a2><b2 b2Value="xxxx2"/></a2>"));
在這種情況下entity
對象變成A2
類的實例 - 其是正確的。但內場b
包含B1
類的實例,其內部value
是null
(見下圖):
任何想法?