0
我想讀一些XML到案例類,反之亦然。一切似乎都很好,但列表屬性。我不知道有關異常:如何在Scala中使用JAXB取消/編組列表?
Exception in thread "main" javax.xml.bind.UnmarshalException: Unable to create an instance of scala.collection.immutable.List
順便說一句,可能是JAXB不適合我的目的,在所有和我應該使用XML處理本地斯卡拉方式?但我的目標XSD非常大,我認爲這會很痛苦。
這裏是我的代碼:
package common
import java.io.StringReader
import scala.annotation.target.field
import javax.xml.bind.annotation._
import javax.xml.bind.annotation.adapters._
import javax.xml.bind._
import common.Types.{xmlTypeAdapter, xmlElement}
@XmlRootElement(name = "person")
@XmlAccessorType(XmlAccessType.FIELD)
case class Person(
@xmlElement(required = true) fullname: String,
username: String,
age: Int,
favNumbers: List[Int]){
private def this() = this("", "", 0, List())
}
object JaxbTest {
val context = JAXBContext.newInstance(classOf[Person])
def main(args: Array[String]) {
val personXml1 = "<person><fullname>Martin Krasser</fullname><username>mrt1nz</username><age>30</age><favNumbers><favNumber>73</favNumber><favNumber>47</favNumber></favNumbers></person>"
assert(context.createUnmarshaller().unmarshal(new StringReader(personXml1)) ==
Person("Martin Krasser", "mrt1nz", 30, List(73,47)))
context.createMarshaller.marshal(Person("Martin Krasser", "mrt1nz", 30, List(73,47)), System.out)
}
}
package object Types {
type xmlElement = [email protected]
type xmlTypeAdapter = [email protected]
}
它給出了堆棧跟蹤嗎?如果遇到問題,請考慮爲JAXB使用Java集合,並使用scala.collection.JavaConverters將它們封裝起來。 –
絕對需要使用Java集合 – sourcedelica
謝謝大家,我會嘗試java的ArrayList而不是不可變的scala的List – vicont