2016-04-27 1 views
0

Ich habe mit einem Problem während meiner Abschlussarbeit konfrontiert und ich hoffe jemand da draußen kann mir helfen. Das Problem ist das folgende, ich arbeite mit einem großen Quellcode (eine bereits gemachte Bibliothek) und möchte etwas XML-Bindung an einige Klassen durch die Spezifikation einer input.xml-Datei machen. Hier ist ein Beispiel, wie ein Teil des Codes strukturiert:XML2Java Mapping - Umgang mit Vererbung

interface IObject extends Writeable, PrimitiveSinkable{ 
    //methods, fields... 
} 
interface IMessage extends IObject{ 
//methods, fields.... 
} 

interface IRequestMessage extends IMessage, IObject{ 
//methods, fields... 
} 

class RequestMessageVer10 implements IRequestMessage{ 
//methods, fields.... 
} 

class RequestMessageVer11 implements IRequestMessage{ 
//methods, fields.... 
} 

Also, ich, was ich will, ist durch eine input.xml Datei mit von der Schnittstelle IRequestMessage nach rechts Klasse durch das Versionsattribut auf der Karte, hier ist ein Beispiel für den vorgetäuschten xml:

<requestmessage version=10> 
//other fields... 
</requestmessage> 
<requestmessage version=11> 
</requestmessage> 

Ist es möglich, dies zu erreichen? Wenn das so ist, wie? Oder wie kann ich es umgehen?

Mit besten Grüßen,

Diogo Duarte

+0

Nur etwas pedantisch, aber Klassen implementieren Schnittstellen. – gfelisberto

+0

Sie haben Recht! Habe den Fehler nicht gesehen, danke –

+0

Ich bin mir nicht sicher, was Sie genau erreichen wollen. Ich nehme an, dass Sie das XML mit der Konfiguration haben und Instanzen der dort deklarierten Klassen erstellen wollen. Ist es das? – gfelisberto

Antwort

0

Unter der Annahme, dass Sie bereits die XML-Datei analysiert und haben eine Version Variable mit diesen Informationen Sie die Class.forName(String) wie diese verwenden:

IRequestMessage message = (IRequestMessage)Class.forName("RequestMessageVer"+version).newInstance(); 

Wenn Sie Parameter an den Klassenkonstruktor übergeben müssen, können Sie einen bestimmten Konstruktor finden und verwenden. Hier ist ein Beispiel, das die RequestMessageVer11 Klassenkonstruktors findet, die einen String und einen Integer als Parameter übernimmt:

IRequestMessage message = (IRequestMessage)Class.forName("RequestMessageVer"+version).getConstructor(String.class, Integer.class).newInstance("String parameter", 42); 

Wenn Sie die XML-Datei analysieren müssen empfehle ich eine einfache tutorial.

Hoffe, das hilft.

+0

Ich denke, Sie haben den Punkt verpasst. Ich habe die XML-Datei nicht analysiert. Ich möchte die entsprechenden Klassen analysieren und zuordnen. –