当需要@XmlJavaTypeAdapter时,如何使用JAXB/SCALA(反)序列化对象



我需要帮助使用JAXB来(反)序列化JTS库的多边形:

实现

class PolygonAdapter extends XmlAdapter[String,Polygon] {...}

并注释多边形字段,如:

@XmlRootElement(name = "Room")
case class Room(@XmlAttribute name: String, description: String,
                @XmlJavaTypeAdapter(classOf[PolygonAdapter]) polygon: Polygon) {...}

我得到部分classOf[PolygonAdapter])标记报告以下错误:

Multiple markers at this line
- type mismatch; found : java.lang.Class[room.PolygonAdapter](classOf[room.PolygonAdapter])     required: java.lang.Class[_ <: 
 javax.xml.bind.annotation.adapters.XmlAdapter]
- annotation argument needs to be a constant; found: classOf[PolygonAdapter]
- annotation argument needs to be a constant; found: classOf{<null>}[PolygonAdapter]{<null>}
- type mismatch; found : java.lang.Class[room.PolygonAdapter](classOf[room.PolygonAdapter])     required: java.lang.Class[_ <: 
 javax.xml.bind.annotation.adapters.XmlAdapter]
- annotation argument needs to be a constant; found: classOf{<null>}[PolygonAdapter]{<null>}

我的问题:

  • 如何解决这个问题?
  • 有更好的方法(反)序列化复杂的对象层次结构在scala比使用JAXB?

谢谢。

我不确定如何解决你的第一个问题。注释case类可能有问题吗?可以尝试使用非case类。但还是很不确定。可能和这个SO问题有关?

scala:注释访问方法

但是,你看过Scala内置的XML特性吗?

http://www.ibm.com/developerworks/library/x-scalaxml/

http://www.scala-lang.org/node/131

http://www.codecommit.com/blog/scala/working-with-scalas-xml-support

编辑:可能值得一看:http://scalaxb.org/如果你想避免使用Scala的内置功能…

最新更新