Simple Framework - Verschiedene Elemente mit gleicher Oberklasseeinlesen

J

J4y

Neues Mitglied
2
Hallo alle miteinander,

ich habe eine XML-Datei in der eine Liste von Elementen, die von der gleichen Klasse in Java erben - hier Name
XML-Datei
Code:
<myTown>
    <name type="myname">Peter</name>
    <name type="myname">Paul</name>
    <name type="myadress">The White House</name>
    <name type="myname">Daisy</name>
</myTown>
in Java möchte ich das ganze wie folgt abbilden:
Name
Code:
@Root(strict=false)
public abstract class Name {    
    public abstract  String getValue();
}
MyName
Code:
public class MyName extends Name{
    @Text
    protected String value;

    public MyName(String value) {
        super();
        this.value = value;
    }

    public String getValue() {
        return value;
    }
}
MyAddress
Code:
@Element
public class MyAddress extends Name{
    @Text
    protected String value;
  
    public MyAddress(String value) {
        super();
        this.value = value;
    }

    public String getValue() {
        return value;
    }
}
MyTown - Oberelement
Code:
@Root
public class MyTown {    
    @ElementList(inline=true,entry="name")
    protected List<Name> names;
}
Da das Framework nicht in der Lage ist, Unterklassen von Namen zu finden, habe ich mir überlegt, dass ich hierfür einen eigenen Konverter erstelle, der über das Attribut Type die entsprechenden Klassen erzeugt
Code:
public class MyConverter implements Converter<Name>{

    @Override
    public Name read(InputNode node) throws Exception {
        InputNode typeNode = node.getAttribute("type");
        String type = typeNode.getValue();
        String name = node.getValue();
        
        if(type.equals("myname")){
            return new MyName(name);
        } else if(type.equals("myaddress")){
            return new MyAddress(name);
        }
        return null;
    }}
Insgesamt funktioniert das jedoch nicht. Wenn ich das so einlese wird der Fehler geworfen, dass von Name keine Instanz erzeugt werden kann.
Daher meine Frage: Ist an dem Code etwas falsch? Muss das @Convert vielleicht an eine andere Stelle?

Hinweis: Dies ist nur ein Minimal-Beispiel meines Problems. Die XML Datei empfange ich bei meinem Programm von einem Server.
Als Konsequenz kann ich also nicht das Class-Attribut einfach hinzufügen und die Architektur kann insgesamt nicht verändert werden
 
Hi J4y,

...

regards

EDIT: Hab ma den Unsinn gelöscht. Nach dem Testen hab ich verschiedene Ergebnisse bekommen. Jetzt weiß ich nicht wo der Fehler liegt XD

Aber ggfs. solltest du nachgucken, wo du von der Klasse Name eine Instanzierung machst. (könnte die Ursache sein)
 
Zuletzt bearbeitet:
Hi Neeldarax,

danke für deine Antwort!
An der Sache liegt es aber leider nicht. Auch wenn eine Klasse abstrakt ist kann sie über Konstruktoren verfügen und Unterklassen können durchaus super aufrufen.
Ansonsten wäre es natürlich ein einfacher blöder Fehler gewesen :-D Das wäre mir gerade fast sogar lieber^^

Ich hab mittlerweile in Erfahrung bringen können, dass die Elemente in der richtigen XML (in diesem Beispiel nicht abgebilded) ein Attribut xsi:type haben. Das scheint wohl auch ein Standard zu sein. Mir würde es also auch helfen, wenn ich das explizit bearbeiten könnte.
 
Neeldarax schrieb:
Aber ggfs. solltest du nachgucken, wo du von der Klasse Name eine Instanzierung machst. (könnte die Ursache sein)

Ich selber erstelle keine Instanz von Name. Das ist das was durch das Framework gemacht wird. Und hier liegt eben das Problem.
In der Klasse MyTown ist eine Liste mit Elementen vom Type Name vorgegeben. Und das Framework ist hier nicht in der Lage die entsprechende Unterklasse von Name zu finden. Das geht ja auch nicht ohne weiteres in Java. Daher suche ich eine Möglichkeit hier dem Framework mitzuteilen welche Klasse es verwenden soll.
Auf der HP der Entwickler steht, dass man in der XML Datei selber ein bestimmtes Attribut angeben kann, das die Klasse spezifizert. Die Strutkur des Dokumentes ist aber fest vorgegeben. Ich brauche also eine Möglichkeit dies zb. über Annotation zu tun.
 

Ähnliche Themen

L
Antworten
4
Aufrufe
1.337
lonnie9020
L
F
Antworten
0
Aufrufe
837
FlorianAlfredo
F
B
Antworten
4
Aufrufe
494
bb321
B
Zurück
Oben Unten