【问题标题】:Failed to parse List of elements with attributes无法解析具有属性的元素列表
【发布时间】:2013-02-27 17:55:29
【问题描述】:

我有一个具有 List 成员的对象链接,而链接只有属性,但列表的解析有问题 - 它被创建为空。
在下面的测试中links.getLinks() 返回空列表。有什么想法吗?
XML 示例:

<links>
<link x="1" y="2" />
<link x="3" y="4" />
</links>

Java

@JacksonXmlRootElement(localName="links")
public class Links extends BaseAmebaElement {

@JacksonXmlProperty(localName="link")
//@JacksonXmlElementWrapper(localName="link")
private Collection<Link> links;

public Collection<Link> getLinks() {
    return links;
}

public void setLinks(Collection<Link> links) {
    this.links = links;
}
}

...

@JacksonXmlRootElement(localName="link")
public class Link {

@JacksonXmlProperty(localName="x", isAttribute=true)
private String href;

@JacksonXmlProperty(localName="y", isAttribute=true)
private String rel;

...

    XmlMapper  xmlMapper = new XmlMapper ();
    try {
        Links links = xmlMapper.readValue(input, Links.class);
        assertNotNull(links);
        assertNotNull(links.getLinks());
        assertEquals(2, links.getLinks().size());
    } catch (Throwable e) {
        fail(e.getMessage());
    }

【问题讨论】:

    标签: java xml jackson fasterxml


    【解决方案1】:

    我可以在一些更改后得到结果。但是,它可以取出第一行(它为空)。我不知道为什么。

    @JacksonXmlElementWrapper(useWrapping=false)
    @JacksonXmlProperty(localName="link")
    private Collection<Link> links;
    

    更新: 这应该是版本 2.1.4 中的错误。我刚试过master,效果很好。

    【讨论】:

    • 确保您使用的是最新版本 (2.1.4)。你的代码和注释在我看来是正确的。
    • @StaxMan 是的,我使用的是 2.1.4 (com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.1.4)。
    • 我尝试了同样的事情......在不同版本的尝试中我也看到了这个问题 - 列表中的第一个元素始终为空。如果我有 5 个元素 - 第一个是 null 而其他 4 个在里面。我还检查了元素是否有问题-但是不,即使所有元素中的相同内容也会使第一个元素为空:(因为这仅用于练习和 POC-我最终的快速解决方法是使用 XStream . 然而,使用 XStream 的缺点是您必须解析所有数据,它非常严格并且对模型的变化非常敏感。
    • 听起来 2.2.0-SNAPSHOT 会起作用,而且 2.2.0 应该很快就会发布(2 周内)。很遗憾听到 2.1.4 有这些问题。最后一件事:一些问题与使用 SJSXP Stax 解析器(来自 JDK)有关,而 Woodstox (woodstox.codehaus.org) 效果更好。所以值得使用。
    • 我基本上已经在 2.2.0 中尝试过这个用例,但我仍然看到这个错误,包括标准 JDK Stax 解析器和 Woodstox 解析器。
    猜你喜欢
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多