杰克逊空XML数组反序列化

5

我有一个来自Recurly服务的xml,其中包含交易列表。有时它是空的,看起来像这样:

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

我需要使用Jackson进行反序列化。我已经尝试了下一步映射。
@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);

响应实体结构并不是严格规定的,任何帮助都将不胜感激。谢谢。

1个回答

1
我遇到了类似的问题,运行"jackson-dataformat-xml"的2.2版本时出现了问题。我降低了这个库的版本,然后它就可以工作了。
例如(如果您正在使用Maven)。
<dependency>
  <groupId>com.fasterxml.jackson.dataformat</groupId>
  <artifactId>jackson-dataformat-xml</artifactId>
  <version>2.2.3</version>
</dependency>

这是与第三方Java Recurly库使用相同的版本 - http://search.maven.org/#artifactdetails%7Ccom.ning.billing%7Crecurly-java-library%7C0.1.6%7Cjar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接