2013-03-12 97 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