2016-07-06 9 views
10

Ich benutze das jaxb2-maven-plugin um JaxB-Klassen aus einer gegebenen XSD zu generieren. Es funktioniert gut. Aber jetzt möchte ich java.util.Optional in den generierten Klassen verwenden. Aber JaxB erzeugte die Klassen ohne die Optionals. Also bin ich gezwungen, eine Null-Prüfung für jede Variable durchzuführen.Wie generiere ich JaxB-Klassen mit java.util.Optional?

Wusste jemand, wie das jaxb2-maven-plugin konfiguriert werden muss, um java.util.Optional zu verwenden?

Danke für Ihre Hilfe!

+1

Arbeiten an generierten Klassen verbindlich. Warum reichern Sie das xsd nicht mit nillable = "true" Feldern an. –

+0

Ich stimme @Mark zu, Sie sollten es vermeiden, generierte Klassen zu ändern. fand ich eine ähnliche Frage, und es scheint machbar individuellen Adapter verwenden, ohne generierten Klassen zu ändern: https://stackoverflow.com/questions/23071450/using-guavas-optional-with-xmlattribute – Woody

Antwort

0

Vielleicht könnten Sie etwas allgemeineres finden, aber ich bin mir nicht sicher, ob dies möglich ist. Auf jeden Fall können Sie immer noch benutzerdefinierte Adapter für Typen definieren Sie optional sein wollen.

Hier ein Beispiel für Integer ist

Zuerst diesen Adapter einen Adapter erstellen

public final class IntegerOptionalAdapter extends OptionalAdapter<Integer> 
{ 
} 

Dann nutzen Sie in Ihrem nicht gute Wahl

@XmlAttribute 
@XmlJavaTypeAdapter(IntegerOptionalAdapter.class) 
private Optional<Integer> someInteger; 
+0

Es ist eigentlich keine gute Idee optionals zu lagern Felder. Besser, sie in Gettern zu erstellen. –