2010-12-17 7 views
1

Ich bin derzeit auf ein peinliches Problem auf JAXB stecken. So habe ich die folgende Klassenstruktur in Ort:JAXB 2 Annotation und Subklassen Kopfschmerzen

@XmlType 
public abstract class MySuperClass 
{ 
    ... 
    ... 
    @XmlTransient 
    public Double getValue() ... 
    ... 
} 

@XmlType 
public class MySubClass extends MySuperClass 
{ 
    public Double getValue() 
    { 
     return 100.00; 
    } 
} 

@XmlType 
public class MySubClass2 extends MySuperClass 
{ 
    public Double getValue() 
    { 
     return 100.00; 
    } 
} 

Und jetzt in meiner anderen JAXB kommentierte Klasse, ich möchte, dies zu tun:

@XmlType 
public class MyOtherClass 
{ 
    private MySuperClass var; 

    public MySuperClass getVar() 
    { 
     return this.var; 
    } 
} 

So der Grund ist, dass ich möchte var gesetzt zur Laufzeit, so dass der tatsächliche Rückgabetyp entweder MySubClass oder MySubClass2 wäre. Das Marshalling nach XML ist fehlerfrei, das Zurückstellen in Java-Klassen hat mir jedoch Nullwerte gegeben. Die Setter-Methode wurde nicht aufgerufen. Wie kann ich die Klassenhierarchie korrekt abmarschieren und trotzdem beibehalten?

Hilfe wird sehr geschätzt ...

Danke,

Antwort

1

OK, erhielt diese einen aufgelöst. Es scheint, dass JAXB nur innerhalb der Klasse nach der deklarierten Setter-Methode sucht und nicht zur Elternklasse. Nach dem Überschreiben der Setter-Methode in der Unterklasse funktionierte das Unmarshalling.