JAXB Unmarshalling mehrerer Objekte

blablaman

Mitglied
Hallo,

ich stehe vor folgendem Problem.

Ich habe eine XML mit folgender Struktur.

<rdf:RDF version="0.91">

<entries>

</entries>

<entries>

</entries>

...

</rdf:RDF>

Ich möchte daraus ein Array von Entries(Offers)-Objekten generieren. Meine Frage ist nun, wie ich das lösen soll.
Eine mögliche Lösung, die ich gefunden habe, ist eine Klasse zu erstellen, welche eine Liste von Offers(Quellcode) enthält. Ich kann die XML dann zu einem Objekt dieser Klasse konvertieren und dann per toArray-Methode in ein Offer-Array umzuwandeln.


Java:
@XmlRootElement(name = "entries")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder={"id", "startLoc", "startID", ......})
public class Offer1 {
	
	/**
	 * Interne, auto_increment DB-ID 
	 */
	@XmlElement(nillable = false, name = "id", required = true)
	private int id;
	
	
	/**
	 * Startort
	 */
    @XmlElement(nillable = false, name = "startloc", required = true)
	private String startLoc;
    
	/**
	 * Startort-ID
	 */
    @XmlElement(nillable = false, name = "startID", required = true)
	private String startID;
    //.... 
    //Getters und Setters

}

Gibt es da eine elegantere Lösung ? Über Tipps würde ich mich freuen.

Grüße


blablaman
 
Hallo,

wenn ich es richtig verstehe, dass es dir um eine Liste von offers bzw. entries geht, dann
glaube ich, dass dein Beispielklassenmodell noch unvollständig ist.

Nur kurz: Mit JAXB versucht man ja ein Java-Klassen Modell auf ein XML Modell abzubilden und umgekehrt.

Deine Offer-Klasse ist ein Anfang. Sind tatsächlich alle Felder in der Offer1 Klasse Elemente in deinem
XML oder doch eher lediglich Attribute ?
Wenn nicht, dann solltest du das zu @XmlAttribute wandeln.

Mit einer weiteren 'oberen' Klasse könntest du dann die Liste von entries aus deinem XML aufnehmen.
In etwa so:

Java:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "")
public class Offers {

    @XmlElement
    ArrayList<Offer1>offers = new ArrayList<Offer1>(); 
}

Dem JAXB Context würdest du dann diese Klasse mitteilen, damit du erst in die Lage versetzt wirst mehr als ein offer bzw. entries aus dem XML zu 'unmarshallen'.

Grueße.
 
Hallo,

erstmal vielen Dank für die schnelle Antwort. So wie dein angegebener Quellcode habe ich es mir auch vorgestellt. Ich war mir nur nicht sicher, ob es noch eine andere elegantere Lösung gibt.

Alle Felder in der Offer-Klasse sind Elemente der XML. Ich bekomme die XML aus einem PHP-Aufruf und in der XML sind aber nicht alle Elemente aufgelistet, die in der Offer-Klasse zu finden sind, d.h. es sind auch Null-Werte möglich.

Ich versuche es dann mal ...und melde mich später nochmal.


Grüße


blablaman
 

Zurück
Oben