2017-07-29 23 views
0

PeopleタグでラップされたPerson要素のコレクションを含むXMLを逆シリアル化または非整列化しようとしています。 JAXBを使用してこのXMLをKotlinで非直列化しようとしています。すべてがコンパイルされ、エラーなく実行されますが、クラス内のコレクションは常に空です。このコレクションを非マーシャリングするにはどうすればよいですか?JAXBおよびKotlinを使用してxmlオブジェクトのコレクションを非整列化できません。

import java.io.StringReader 
import javax.xml.bind.JAXB 
import javax.xml.bind.annotation.XmlAccessType 
import javax.xml.bind.annotation.XmlAccessorType 
import javax.xml.bind.annotation.XmlElement 
import javax.xml.bind.annotation.XmlElementWrapper 

@XmlAccessorType(XmlAccessType.FIELD) 
data class Person(
     var name:String = "", 
     var age:Int = 0 
) 

@XmlAccessorType(XmlAccessType.FIELD) 
data class Report(
     var statusCode:Int = 0, 
     @XmlElementWrapper(name = "people") 
     @XmlElement(name = "person") 
     var people:List<Person>? = null 
) 

val xml = """ 
<report> 
    <statusCode>3</statusCode> 
    <people> 
     <person> 
      <name>Bob</name> 
      <age>30</age> 
     </person> 
     <person> 
      <name>Alice</name> 
      <age>40</age> 
     </person> 
    </people> 
</report> 
""" 

fun main(args: Array<String>) { 
    val report = JAXB.unmarshal(StringReader(xml), Report::class.java) 
    println(report) // Report(statusCode=3, people=[]) 
} 

答えて

4

あなたはFIELDとしてXmlAccessTypeを定義したので、これはあるので、あなたは、例えば、バッキングfield上の注釈付きの注釈を作るためにsite targetを使用する必要があります。

// v--- annotated on field rather than getter/setter/params 
@field:[XmlElementWrapper(name = "people") XmlElement(name = "person")] 
var people: List<Person>? = null 
関連する問題