【问题标题】:@XmlElementWrapper generates a NullPointerException@XmlElementWrapper 生成 NullPointerException
【发布时间】:2011-08-24 11:25:33
【问题描述】:

大家好 我正在尝试表示以下 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 库)。

有人知道吗?

【问题讨论】:

    标签: xml jaxb nullpointerexception unmarshalling 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;
    }
    

    当我将 setAggregatioinLink 更改为 setAggregationLink 时,我让您的示例按预期运行。

    【讨论】:

    • 非常感谢!你完全正确!我真的看不到错字!我总是使用自动 getter 和 setter IDE 生成,并且该 setter 来自拼写错误(后来更正)的属性命名!我花了很多的努力在库的内部进行调试!下一个圣诞节,你将拥有一瓶来自意大利的葡萄酒! ;-)
    猜你喜欢
    • 1970-01-01
    • 2013-02-28
    • 2012-07-04
    • 1970-01-01
    • 2021-09-20
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多