2017-09-16 1 views
0

Ich versuche herauszufinden, wie XML zu entfernen, wenn ein Tag fehlt, kann ich den Standardwert als leere Zeichenfolge anstelle von NULL festlegen. Momentan verwendet XStream null, was ich nicht möchte.Wie kann XML mit dem Standardwert als leere Zeichenfolge mit XStream entpackt werden?

Diese Klasse hat wie über 40 Eigenschaften, die alle String sind. Es gibt einen Konstruktor mit einem Standardwert für jeden. Ich meine, wie folgt aus:

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

(ja, ich versuche es mit Scala zu verwenden)

Technisch konnte ich einen benutzerdefinierten Konverter schreiben, die sie als leere Zeichenfolge setzt, aber das fühlt sich ein wenig albern.

Ich habe versucht, diese von hier vorgeschlagen mit

new XStream(new PureJavaReflectionProvider()) 

als: https://stackoverflow.com/a/29747705/598562

Es allerdings nicht zu funktionieren scheint.

eine andere Idee?

+0

diese Antwort Siehe: https://stackoverflow.com/a/12042095/4899193 –

+0

aber das ist jaxb, nicht Xstream – sowen

Antwort

0

XStreams verwendet einen leeren Standardkonstruktor und führt ihn anschließend durch, indem er Setter danach aufruft. Damit dies ohne einen benutzerdefinierten Konverter funktioniert, müssen Sie einen expliziten leeren Konstruktor erstellen, der alles mit den erwarteten Standardwerten füllt. Hier ist ein Beispiel, Arbeits Anwendung:

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("", "") 
} 
Verwandte Themen