大家好 我试图代表以下xml代码:
<AggregationMeta>
<AggregationLink>
<LocalName>stuff</LocalName>
<Value>stuff</Value>
<Meta/>
</AggregationLink>
<AggregationLink>
<LocalName>stuff</LocalName>
<Value>stuff</Value>
<Meta/>
</AggregationLink>
</AggregationMeta>
我希望使用@XmlElementWrapper注释执行此操作。
这是我使用它的类:
public class VrIdnMeta {
private String lri;
private String nodeLocalName;
private List<Link> referenceLink;
private List<Link> aggregationLink;
private List<SimpleLink> backLink;
private List<SimpleLink> incomingChangeLink;
...
@XmlElementWrapper(name = "ReferenceMeta")
@XmlElement(name = "ReferenceLink")
public List<Link> getReferenceLink() {
return referenceLink;
}
public void setReferenceLink(List<Link> referenceLink) {
this.referenceLink = referenceLink;
}
@XmlElementWrapper(name = "AggregationMeta")
@XmlElement(name = "AggregationLink")
public List<Link> getAggregationLink() {
return aggregationLink;
}
public void setAggregatioinLink(List<Link> aggregationLink) {
this.aggregationLink = aggregationLink;
}
@XmlElementWrapper(name = "BackLinkMeta")
@XmlElement(name = "BackLink")
public List<SimpleLink> getBackLink() {
return backLink;
}
public void setBackLink(List<SimpleLink> backLink) {
this.backLink = backLink;
}
@XmlElementWrapper(name = "IncomingChangeMeta")
@XmlElement(name = "IncomingChangeLink")
public List<SimpleLink> getIncomingChangeLink() {
return incomingChangeLink;
}
public void setIncomingChangeLink(List<SimpleLink> incomingChangeLink) {
this.incomingChangeLink = incomingChangeLink;
}
}
这里是SimpleLink类
public class SimpleLink {
private String localName;
private String value;
...
@XmlElement(name = "LocalName")
public String getLocalName() {
return localName;
}
public void setLocalName(String localName) {
this.localName = localName;
}
@XmlElement(name = "Value")
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
最后是Link类
public class Link extends SimpleLink{
private String meta;
public Link(String localName, String value, String meta) {
super(localName, value);
this.meta = meta;
}
public Link() {
super();
}
public Link(String localName, String value) {
super(localName, value);
}
@XmlElement(name = "Meta")
public String getMeta() {
return meta;
}
public void setMeta(String meta) {
this.meta = meta;
}
}
当我使用Jaxb2将xml解组为上面写的那个时,问题出现了:我得到一个NullPointerException :-(。 我读到jaxb中有一个关于这个事实的错误,但它在2006年解决了,我使用的是spring 3(使用他自己的jaxb2库)。
任何人都有线索?
答案 0 :(得分:1)
NPE似乎源于你的get和set方法的名称不匹配(在VrIdnMeta
中):
@XmlElementWrapper(name = "AggregationMeta")
@XmlElement(name = "AggregationLink")
public List<Link> getAggregationLink() {
return aggregationLink;
}
public void setAggregatioinLink(List<Link> aggregationLink) {
this.aggregationLink = aggregationLink;
}
当我将setAggregatioinLink
更改为setAggregationLink
时,我让您的示例按预期运行。