2013-03-12 3 views
4

개체에 링크가 있지만 속성에 대한 링크 만 있지만 목록의 구문 분석에 문제가 있습니다. 즉, 빈 항목이 만들어집니다.
아래 테스트에서 links.getLinks()은 빈 목록을 반환합니다. 어떤 아이디어?
XML 예제 :구문 분석하지 못했습니다. 속성이있는 요소 목록

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

자바

@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

. 그러나 첫 번째 행을 가져올 수 있습니다 (null입니다). 왜 그런지 모르겠습니다.

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

업데이트 : 이것은 2.1.4 버전의 버그입니다. 방금 master을 시도했지만 정상적으로 작동합니다.

+1

최신 버전 (2.1.4)을 사용하고 있는지 확인하십시오. 귀하의 코드와 특수 효과가 제게 적합합니다. – StaxMan

+1

@StaxMan 예, 2.1.4 (com.fasterxml.jackson.dataformat : jackson-dataformat-xml : 2.1.4)를 사용하고 있습니다. – longhua

+0

나는 똑같은 것을 시도했다 ... 다른 버전의 시도에서 나는 또한이 문제를 보았다 - 첫 번째 요소는 항상 목록에서 null이다. 5 개의 요소가있는 경우 - 첫 번째 요소는 null이고 다른 요소는 내부에 있습니다. 또한 요소에 문제가 있는지 확인했습니다. 그러나 모든 요소의 동일한 내용으로도 첫 번째 요소가 null이됩니다. (이것이 연습 및 POC에만 해당되므로 최종 해결 방법은 XStream을 사용하는 것이 었습니다. 그러나 XStream을 사용하는 측면에서 모든 데이터를 구문 분석해야한다는 사실은 모델의 변경 사항에 매우 엄격하고 민감합니다. – urir

관련 문제