Jaxb Type mapping

Status
Nicht offen für weitere Antworten.

puddah

Aktives Mitglied
Hallo zusammen,

ich habe ein Problem mit Jaxb. Ich möchte, dass der JaxB-Compiler ein bestimmtes XML-Element nicht als neue Klasse generiert, sondern eine bereits vorhandene Klasse verwendet. Diese Klasse soll dann als Typ in den generierten Klassen eingetragen werden, in denen das XML-Element referenziert wird. Hat jemand ne Ahnung wie man das machen kann? Bzw. ob das überhaupt möglich ist?
 

Noctarius

Top Contributor
Man kann in JAXB eine bestehende Klasse mit den passenden Annotations versehen oder man schreibt einen JAXB Adapter der die Konvertierung zwischen alter Klasse und der JAXB generierten Klasse vollbringt.

Java:
@XmlJavaTypeAdapter(AlteKlasseAdapter.class)
public class AlteKlasse {
	private int id;
	private String description;

	public void setId(int id) {
		this.id = id;
	}

	public int getId() {
		return id;
	}

	public void setDescription(String description) {
		this.description = description;
	}

	public String getDescription() {
		return description;
	}
}

Java:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
    "description"
})
@XmlRootElement(name = "neueklasse")
public class NeueKlasse {
	@XmlAttribute(required = true)
	private int id;
	@XmlAttribute(required = true)
	@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
	private String description;

	public void setId(int id) {
		this.id = id;
	}

	public int getId() {
		return id;
	}

	public void setDescription(String description) {
		this.description = description;
	}

	public String getDescription() {
		return description;
	}
}

Java:
public class AlteKlasseAdapter extends 
		javax.xml.bind.annotation.adapters.XmlAdapter<NeueKlasse, AlteKlasse> {
	@Override
	public NeueKlasse marshal(AlteKlasse v) throws Exception {
		NeueKlasse neueKlasse = new NeueKlasse();
		neueKlasse.setId(v.getId());
		neueKlasse.setDescription(v.getDescription());
		return neueKlasse;
	}

	@Override
	public AlteKlasse unmarshal(NeueKlasse v) throws Exception {
		AlteKlasse alteKlasse = new AlteKlasse();
		alteKlasse.setId(v.getId());
		alteKlasse.setDescription(v.getDescription());
		return alteKlasse;
	}
}
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben