这是我的情景。
我有一个NodeElement类,有两个列表,inLinks和outLinks。
Link类有两个对NodeElement的引用,一个用于源,另一个用于target。
@XmlAccessorType(XmlAccessType.FIELD)
class NodeLement{
@XmlElement(name="link")
@XmlElementWrapper
private List<Link> inLinks = new ArrayList<Link>();
@XmlElement(name="link")
@XmlElementWrapper
private List<Link> outLinks = new ArrayList<Link>();
...
}
@XmlAccessorType(XmlAccessType.FIELD)
class Link{
@XmlInverseReference(mappedBy="inLinks")
private NodeElement source;
@XmlInverseReference(mappedBy="outLinks")
private NodeElement target;
public NodeElement getSource() {
return source;
}
public void setSource(NodeElement source) {
this.source = source;
this.source.getInLink().add(this);
}
public NodeElement getTarget() {
return target;
}
public void setTarget(NodeElement target) {
this.target = target;
this.target.getOutLink().add(this);
}
}
测试类
class test {
public static void main(String args[]) throws JAXBException, FileNotFoundException {
//rootelement
ContainerElement c = new ContainerElement();
Link link = new Link();
NodeElement target = new NodeElement();
NodeElement source = new NodeElement();
link.setSource(source);
link.setTarget(target);
c.addChild(target);
c.addChild(source);
JAXBContext jc = JAXBContext.newInstance(ContainerElement.class);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(c, new File(XML_MODEL));
}
}
结果:
<?xml version="1.0" encoding="UTF-8"?>
<containerElement>
<ID>427485825424142</ID>
<inLinks/>
<outLinks/>
<children>
<child xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="NodeElement">
<ID>427520478709873</ID>
<inLinks/>
<outLinks>
<link xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Link">
<ID>427582226289815</ID>
</link>
</outLinks>
</child>
<child xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="NodeElement">
<ID>427548409900894</ID>
<inLinks>
<link xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Link">
<ID>427582226289815</ID>
</link>
</inLinks>
<outLinks/>
</child>
</children>
</containerElement>
显然,我在解组时得到两个Link实例,每个实例都有源或目标为null,另一个目标/源正确设置。
我怎么能解决这个问题,以便解组提供一个Link正确初始化的实例? 我想在元帅之前和之后使用来解决源和目标之间的关系,但我只是在学习JAXB,所以任何帮助都会受到赞赏
答案 0 :(得分:0)
在XML中表示关系有两种方式:
@XmlElement
)引用的对象表示为子元素。@XmlIDREF
)引用的对象用外键表示(请参阅:http://blog.bdoughan.com/2010/10/jaxb-and-shared-references-xmlid-and.html)。必须通过完全一个包含关系才能访问每个对象(根对象除外)。可选地,它可以由一个或多个参考关系引用。
如果您希望在首次遇到对象时混合使用这些概念,则通过包含来表示,然后通过引用表示后续时间,然后查看包含完整示例的以下答案。