2017-09-16 8 views
0

タグがないときにXMLをアンマーシャリングする方法を理解しようとしていますが、デフォルト値をNULLではなく空の文字列として設定できます。現在、XStreamはnullを使用していますが、これは私が望むものではありません。XStreamを使用してXMLをデフォルト値で空の文字列としてアンマーシャリングする方法は?

このクラスには40以上のプロパティがあり、すべてStringです。それぞれにデフォルト値を持つコンストラクタがあります。

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

(はい、私はスカラ座でそれを使用しようとしています)

技術的には、私は空の文字列としてそれらを設定しますが、それは少し愚かな感じのカスタムコンバータを書くことができます:私はこのように、意味します。

ここから提案されているよう私はこの

new XStream(new PureJavaReflectionProvider()) 

を使用してみました:https://stackoverflow.com/a/29747705/598562

をが動作するようには思えません。

他のアイデアですか?

+0

がこの回答を参照してください:https://stackoverflow.com/a/12042095/4899193 –

+0

をそれは、XstreamのJAXBではありません – sowen

答えて

0

XStreamsはデフォルトの空のコンストラクタを使用し、その後はsettersを呼び出してそれをフォローします。だから、これをカスタムコンバータなしで動作させるには、あなたが期待するデフォルト値ですべてを埋める明示的な空のコンストラクタを作成する必要があります。ここにサンプルがあり、作業アプリケーション:

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("", "") 
} 
関連する問題