Kniffliges Problem:
Ich habe ein mehrstufiges Klassenmodell:
1. Die Basisklasse [c]AbstractExchangeableBusinessObject[/c] (autogenerated by JAXB, wird jedesmal überschrieben)
1.1 Die Implementation [c]ExchangeableBusinessObject extends AbstractExchangeableBusinessObject[/c], beinhaltet einen Copy-Contructor (quasi stellvertretend für AbstractExchangeableBusinessObject) welchen ich aufrufen möchte
2. Die abstrakte Klasse [c]AbstractMyClass extends ExchangeableBusinessObject[/c] (autogenerated by JAXB, wird jedesmal überschrieben), hier kann ich also keinen Copy-Constructor implementieren
2.1 Die Implementation [c]MyClass extends AbstractMyClass[/c], beinhaltet einen Copy-Constructor (stellvertretend für AbstractMyClass). Problem: Wie rufe ich nun von dieser Klasse aus den (Copy)Konstruktor von 1.1 ExchangeableBusinessObject auf ??? [c]super(myClass)[/c] ruft den (nicht vorhandenen) Copy-Construktor von AbstractMyClass, ich möchte jedoch noch eine "Ebene" tiefer...
Versucht hab ich es an dieser Stelle mit Reflection, derer ich zugegeben aber nicht all zu mächtig bin:
Mit [c]this.getClass().getSuperclass().getSuperclass().getConstructors()[0].???[/c] komme ich denke ich zumindest schonmal an den (bzw. im Beispiel einen beliebigen) Constructor ran. Nur wie übergebe ich dem jetzt das zu kopierende Objekt (quasi analog zu super(myCopyObject)) ???
Zur Ergänzung:
Die abstrakten Klassen definieren einfach nur Felder so wie sie über ein XML Schema definiert wurden. JAXB generiert aber keine Konstruktoren bzw. Copy-Constructoren, sondern nur simple Datenklassen mit Gettern/Settern. Die abstrakten Klassen werden immer wieder überschrieben sobald sich das Datenmodell des XML Schemas ändert. Hier können also keine Methoden implementiert werden. Die abstrakten Klassen können vom Developer nicht angefasst werden und sind tabu.
[EDIT] Es gibt seit kurzem eine mögliche Lösung cc-xjc. Leider läuft das Plugin bei mir derzeit noch nicht mit diesem XML Schema (crashed bei Listen). Bin also weiterhin an einer Lösung mittels Reflection o.Ä. interessiert.
Ich habe ein mehrstufiges Klassenmodell:
1. Die Basisklasse [c]AbstractExchangeableBusinessObject[/c] (autogenerated by JAXB, wird jedesmal überschrieben)
1.1 Die Implementation [c]ExchangeableBusinessObject extends AbstractExchangeableBusinessObject[/c], beinhaltet einen Copy-Contructor (quasi stellvertretend für AbstractExchangeableBusinessObject) welchen ich aufrufen möchte
2. Die abstrakte Klasse [c]AbstractMyClass extends ExchangeableBusinessObject[/c] (autogenerated by JAXB, wird jedesmal überschrieben), hier kann ich also keinen Copy-Constructor implementieren
2.1 Die Implementation [c]MyClass extends AbstractMyClass[/c], beinhaltet einen Copy-Constructor (stellvertretend für AbstractMyClass). Problem: Wie rufe ich nun von dieser Klasse aus den (Copy)Konstruktor von 1.1 ExchangeableBusinessObject auf ??? [c]super(myClass)[/c] ruft den (nicht vorhandenen) Copy-Construktor von AbstractMyClass, ich möchte jedoch noch eine "Ebene" tiefer...
Versucht hab ich es an dieser Stelle mit Reflection, derer ich zugegeben aber nicht all zu mächtig bin:
Mit [c]this.getClass().getSuperclass().getSuperclass().getConstructors()[0].???[/c] komme ich denke ich zumindest schonmal an den (bzw. im Beispiel einen beliebigen) Constructor ran. Nur wie übergebe ich dem jetzt das zu kopierende Objekt (quasi analog zu super(myCopyObject)) ???
Zur Ergänzung:
Die abstrakten Klassen definieren einfach nur Felder so wie sie über ein XML Schema definiert wurden. JAXB generiert aber keine Konstruktoren bzw. Copy-Constructoren, sondern nur simple Datenklassen mit Gettern/Settern. Die abstrakten Klassen werden immer wieder überschrieben sobald sich das Datenmodell des XML Schemas ändert. Hier können also keine Methoden implementiert werden. Die abstrakten Klassen können vom Developer nicht angefasst werden und sind tabu.
[EDIT] Es gibt seit kurzem eine mögliche Lösung cc-xjc. Leider läuft das Plugin bei mir derzeit noch nicht mit diesem XML Schema (crashed bei Listen). Bin also weiterhin an einer Lösung mittels Reflection o.Ä. interessiert.
Zuletzt bearbeitet: