简体   繁体   English

杰克逊空xml数组反序列化

[英]Jackson empty xml array deserialization

I have an incoming xml from Recurly service with list of transactions. 我有来自Recurly服务的传入xml以及事务列表。 Sometimes it's empty and looks like this: 有时它是空的,看起来像这样:

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

I need to deserialize this using Jackson. 我需要使用杰克逊对此进行反序列化。 I've tried next mapping 我试过下一个映射

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

where TransactionObjectResponse class for each transaction. 其中TransactionObjectResponse类为每个事务。 It works fine for non-empty collections, but fails when no transactions came. 它适用于非空集合,但在没有事务发生时失败。 Next message appears: 出现下一条消息:

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)

I used XmlMapper directly, 我直接使用了XmlMapper,

xmlMapper.readValue(responseXml, TransactionObjectListResponse.class);

Response entity structure isn't strict, any help would be appricated. 响应实体结构不严格,任何帮助都会被批准。 Thanks. 谢谢。

I had a similar issue running the 2.2 version of "jackson-dataformat-xml". 我有一个类似的问题运行2.2版本的“jackson-dataformat-xml”。 I took this one library down a version and it worked. 我把这个库带到了一个版本,它起作用了。

ie. 即。 (if you are using Maven) (如果你使用Maven)

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

This is the same version as the 3rd party java recurly library uses - http://search.maven.org/#artifactdetails%7Ccom.ning.billing%7Crecurly-java-library%7C0.1.6%7Cjar 这与第三方java recurly库使用的版本相同 - http://search.maven.org/#artifactdetails%7Ccom.ning.billing%7Crecurly-java-library%7C0.1.6%7Cjar

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM