2013-08-20 3 views
3

트랜잭션 목록이있는 Recurly 서비스에서 들어오는 XML이 있습니다. 때로는 비어 및 다음과 같습니다 :이 사용 잭슨을 역 직렬화 할 필요가Jackson empty xml array deserialization

<transactions type="array"> 
</transactions> 

. 나는 다음 매핑을 시도했다.

@XmlRootElement(name = "transactions") 
public class TransactionObjectListResponse extends ArrayList<TransactionObjectResponse> { 
} 

각 트랜잭션에 대해 TransactionObjectResponse 클래스. 비어 있지 않은 콜렉션에는 유효하지만 트랜잭션이 없을 때는 실패합니다. 다음 메시지가 나타납니다

java.lang.IllegalStateException: Missing name, in state: END_ARRAY 
at com.fasterxml.jackson.dataformat.xml.deser.FromXmlParser.getCurrentName(FromXmlParser.java:310) 
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:289) 
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:157) 
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:123) 
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:230) 
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:207) 
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:23) 
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2888) 
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2034) 

내가 직접 XmlMapper을 사용

xmlMapper.readValue(responseXml, TransactionObjectListResponse.class); 

응답 기업 구조가 엄격하지 않다, 어떤 도움이 appricated 될 것이다. 감사.

답변

1

2.2 버전의 "jackson-dataformat-xml"과 비슷한 문제가 발생했습니다. 이 버전의 라이브러리 하나를 가져 와서 작동 시켰습니다.

즉.

<dependency> 
  <groupId>com.fasterxml.jackson.dataformat</groupId> 
  <artifactId>jackson-dataformat-xml</artifactId> 
  <version>2.2.3</version> 
</dependency> 

(당신은 메이븐을 사용하는 경우)이 제 3 자 자바와 같은 버전 recurly 라이브러리 사용이다 - 불행하게도 http://search.maven.org/#artifactdetails%7Ccom.ning.billing%7Crecurly-java-library%7C0.1.6%7Cjar

+0

이 작동하지 않습니다 :( –