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);

応答エンティティの構造は厳密ではありません。ありがとう。

4

1 に答える 1

1

「jackson-dataformat-xml」の 2.2 バージョンを実行すると、同様の問題が発生しました。この 1 つのライブラリのバージョンを下げたところ、機能しました。

すなわち。(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

于 2013-09-09T10:36:52.773 に答える