JAXB - Prbleme bei der Serialisierung

G

gruenfrosch

Hallo liebe Community,

ich habe gerade angefangen ein wenig mit JAXB (java 1.6) zu arbeiten und finde die elegante Art und Weise der XML-Verarbeitung klasse. Leider bin ich bereits jetzt auf ein "Problem" gestoßen, dass ich nicht lösen kann (und auch keine Lösung im Netz/Forum finden konnte).

Wenn ich folgende Main-Methode...

Java:
package de.customzoowelt.app;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;

public class TestDriver
{

	public static void main(final String[] args) throws Exception
	{
		Fisch fisch = new Fisch();
		fisch.setAlter(22);
		fisch.setFlossenTyp(2);
		
		EinTierZoo etZoo = new EinTierZoo();
		etZoo.setTier(fisch);
		
		JAXBContext context = JAXBContext.newInstance(Zoo.class);
		Marshaller m = context.createMarshaller();
		m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
		m.marshal(etZoo, System.out);		
	}
}

.. mit den folgenden Klassen verwende...

Java:
package de.customzoowelt.app;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class EinTierZoo
{
	private Tier tier;
	
	public void setTier(Tier tier)
	{
		this.tier = tier;
	}
	
	public Tier getTier()
	{
		return this.tier;
	}	
}

Java:
package de.customzoowelt.app;

public class Tier
{
	private int alter;
	
	public void setAlter(int alter)
	{
		this.alter = alter;
	}
	
	public int getAlter()
	{
		return this.alter;
	}
}

Java:
package de.customzoowelt.app;

public class Fisch extends Tier
{
	private int flossenTyp;
	
	public void setFlossenTyp(int flossenTyp)
	{
		this.flossenTyp = flossenTyp;
	}
	
	public int getFlossenTyp()
	{
		return this.flossenTyp;
	}
}

erhalte ich folgende Ausgabe...

Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<einTierZoo>
    <tier>
        <alter>22</alter>
    </tier>
</einTierZoo>

Mir fehlen dann aber die "Fisch"-spezifischen Informationen, weshalb ich mir eigentlich eine Ausgabe wünschen würde, die in etwa so aussieht...

Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<einTierZoo>
    <tier type="de.customzoowelt.app.Fisch">
        <alter>22</alter>
        <flossenTyp>2</flossenTyp>
    </tier>
</einTierZoo>

Gibt es da irgendwelche Annotations, die ich noch dafür setzten muss? Wenn ich beispielsweise eine Liste mit "Tieren" machen würde, dann kann man ja die Annotations XmlElementRefs und XmlElementRef verwenden, um zu sagen, welche abgeleitete Klassen innerhalb der Liste vorkommen können. Ich konnte das aber leider nicht auf mein Beispiel mit nur einer Instanzvariable übertragen.

Wenn mir jemand einen Hinweis geben könnte, wäre ich sehr dankbar.
 
Zurück