如何使用XStream将具有默认值的XML解组为空字符串?

如何使用XStream将具有默认值的XML解组为空字符串?

问题描述:

我想弄清楚如何解析XML时,标签是缺少的,我可以设置为空字符串,而不是NULL的默认值。目前XStream使用null,这不是我想要的。如何使用XStream将具有默认值的XML解组为空字符串?

该课程有超过40个属性,都是String。有一个构造函数,每个都有默认值。我的意思是,像这样:

case class MyData(id: String = "", b: String = "", ....) 

(是的,我想使用Scala使用它)

技术上我可以写它们设置为空字符串自定义转换器,但是感觉有点傻。

我试图用这个

new XStream(new PureJavaReflectionProvider()) 

从这里提出:https://stackoverflow.com/a/29747705/598562

它似乎没有工作,虽然。

任何其他的想法?

+0

看到这个答案:https://stackoverflow.com/a/12042095/4899193 –

+0

但是这JAXB,不西河 – sowen

XStreams使用默认的空构造函数,然后通过之后调用setter来进行跟踪。所以,为了在没有自定义转换器的情况下工作,你需要创建一个显式的空构造函数,用你期望的默认值填充所有内容。下面是一个简单,工作程序:

import com.thoughtworks.xstream.XStream 
import com.thoughtworks.xstream.converters.reflection.PureJavaReflectionProvider 

object Hello extends App { 
    val xstream = new XStream(new PureJavaReflectionProvider()) 
    xstream.alias("MyData", classOf[MyData]) 
    val output = xstream.fromXML("<MyData><id>This should fill in</id></MyData>") 
    println(output) 
} 

case class MyData(id: String = "", var b: String = "") 
{ 
    def this() = this("", "") 
}