2013-03-12 94 views
4

我有对象具有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()); 
    } 

回答

5

我能得到一些改变后的结果。但是,它可能会排出第一行(它为空)。我不知道为什么。

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

更新: 这应该是版本2.1.4中的一个错误。我只是试过master,这工作正常。

+1

确保您使用的是最新版本(2.1.4)。您的代码和注释对我来说看起来是正确的。 – StaxMan 2013-03-12 20:31:36

+1

@StaxMan是的,我正在使用2.1.4(com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.1.4)。 – longhua 2013-03-13 01:13:05

+0

我尝试过同样的事情......在不同版本的尝试中,我也看到了这个问题 - 第一个元素在列表中始终为空。如果我有5个元素 - 第一个是空的,其他4个在里面。我还检查了元素是否存在问题 - 但是否,即使所有元素中的相同内容都使第一个元素为null(因为这仅用于练习和POC - 我的最终和快速解决方法是使用XStream 。但是,使用XStream的缺点是你必须解析所有数据,它对模型的变化非常严格和敏感。 – urir 2013-03-13 05:54:12