2016-04-25 16 views
0

Hallo Ich verwende JAXB (JAVA), um XML zu marshallen.Wie werden leere Listen in JAXB XML-Marshalling nicht angezeigt?

Ich habe einige XMLList Elemente, die manchmal Größe sind gleich Null ist.

Da es tatsächliche Array-Liste-Konstrukten, wenn Getter genannt wird,

der Ausgang zeigt immer leere Elemente wie

<aa></aa> 

ist es überhaupt diese „leer“ Elemente zu beseitigen?

Danke.

+0

Ich denke, - Ihre Sammlung null statt leer machen. – john

+0

So etwas wie Lazy-Initialisierung von Singleton. Machen Sie Ihre Klasse dafür verantwortlich, eine Instanz von 'List' zu erstellen, wenn die Einfügung zum ersten Mal stattfindet, und wenn sie einmal erstellt wurde, verwenden Sie dieselbe. Ebenso sollte die Entfernung aus der Liste geschützt werden. – soufrk

+0

aus irgendeinem Grund hat meine generierten Source Getter wie folgt public List getPointOfAccess() { if (pointOfAccess == null) { pointOfAccess = new Arraylist (); } Rückgabe this.pointOfAccess; } –

Antwort

0
public void representingNullAndEmptyCollections() throws Exception { 
    JAXBContext jc = JAXBContext.newInstance(Root.class); 

    Root root = new Root(); 

    root.nullCollection = null; 

    root.emptyCollection = new ArrayList<String>();// Shows a Empty Element 

    root.populatedCollection = new ArrayList<String>(); 
    root.populatedCollection.add("foo"); 
    root.populatedCollection.add("bar"); 

    Marshaller marshaller = jc.createMarshaller(); 
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
    marshaller.marshal(root, System.out); 
} 
0

Allgemeinen null Felder werden nicht von JAXB generiert. Der Trick besteht darin, einen speziellen Getter zu verwenden.

Es ist häufig so einfach wie:

public List<String> getStuff() { 
    return stuff.isEmpty() ? null : stuff; 
} 
Verwandte Themen