2013-11-27 3 views
0

일부 XML을 사례 클래스로 읽으려고하고 그 반대도 마찬가지입니다. 모든 것이 잘되지만 목록 속성 인 것 같습니다.Scala에서 JAXB를 사용하여 목록을 언/마샬링하는 방법은 무엇입니까?

Exception in thread "main" javax.xml.bind.UnmarshalException: Unable to create an instance of scala.collection.immutable.List 

이 BTW, 모든 내 삶의 목적에 적합하지 않는 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] 
} 
+1

스택 추적을 제공 했습니까? 막히면 JAXB 용 Java 콜렉션을 사용하고 scala.collection.JavaConverters를 사용하여 랩핑하는 것을 고려하십시오. –

+0

확실히 Java 컬렉션을 사용해야합니다 – sourcedelica

+0

여러분, 고맙습니다. 자바의 ArrayList를 불변의 스칼라 목록 대신 사용하려고합니다. – vicont

답변

0

은 자바 컬렉션이 잘 작동 :

여기 내 코드입니다.

코드를 게시했습니다. here

관련 문제