Jackson空XML数组反序列化
我从Recurly服务收到一个带有事务列表的xml。有时它是空的,看起来像这样:
I have an incoming xml from Recurly service with list of transactions. Sometimes it's empty and looks like this:
<transactions type="array">
</transactions>
我需要使用Jackson进行反序列化。我尝试了下一个映射
I need to deserialize this using Jackson. I've tried next mapping
@XmlRootElement(name = "transactions")
public class TransactionObjectListResponse extends ArrayList<TransactionObjectResponse> {
}
其中每个事务的TransactionObjectResponse类。它适用于非空集合,但在没有交易发生时会失败。出现下一条消息:
where TransactionObjectResponse class for each transaction. 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)
我直接使用了XmlMapper,
I used XmlMapper directly,
xmlMapper.readValue(responseXml, TransactionObjectListResponse.class);
响应实体的结构并不严格,可以提供任何帮助。谢谢。
Response entity structure isn't strict, any help would be appricated. Thanks.
我在运行2.2版的 jackson-dataformat-xml时遇到了类似的问题。我从一个版本中删除了这个库,它可以正常工作。
I had a similar issue running the 2.2 version of "jackson-dataformat-xml". I took this one library down a version and it worked.
ie。 (如果您使用的是Maven)
ie. (if you are using Maven)
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.2.3</version>
</dependency>
此版本与第三方Java递归库使用的版本相同- http://search.maven.org/#artifactdetails%7Ccom。 ning.billing%7Crecurly-java-library%7C0.1.6%7Cjar
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