トランザクションのリストを含む 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);
応答エンティティの構造は厳密ではありません。ありがとう。