2011-05-12 47 views
1

大家好 我想代表以下XML代码:@XmlElementWrapper产生一个NullPointerException

 <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库)。

任何人都有线索?

回答

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; 
} 

当我改变setAggregatioinLinksetAggregationLink我得到了你的榜样按预期运行。

+0

我非常感谢你!你是完全正确的!我真的看不到错字!我总是使用自动getter&setter IDE生成,并且setter来自拼写错误(后来更正)的属性命名!我正在努力调试图书馆的胆量!下一个圣诞节你将会有一瓶来自意大利的葡萄酒! ;-) – MaVVamaldo 2011-05-14 11:04:27

相关问题