无法使用JAXB和Kotlin解组xml对象的集合
问题描述:
我想要反序列化/解组包含人标记中包含的Person元素集合的XML。我试图使用JAXB在Kotlin中反序列化这个XML。所有的东西都编译并运行,没有错误,但我班的人员集合始终是空的。我如何解组这个集合?无法使用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=[])
}
答
这是因为你所定义的XmlAccessType
为FIELD
,所以你应该使用site target作出注释的后盾field
注释,例如:
// v--- annotated on field rather than getter/setter/params
@field:[XmlElementWrapper(name = "people") XmlElement(name = "person")]
var people: List<Person>? = null