Interface mit java.lang.ClassCastException und Obfuscator

StehtimSchilf

Erfahrenes Mitglied
Hi Forum

Ich habe in unserer Appli eine Schnittstelle geschrieben, die es anderen Anwendern erlaubt - nennen wir es einmal 'PlugIns' - zu schreiben:

In einer properties-Datei wird der Pfad zum Plugin-Jar und der Klassennamen angegeben. Ich lese die .properties, und instanziere aus dem Jar die Klasse via Reflection - soweit so gut.

Damit dies funktioniert, muss ein Interface implementiert werden.

Bisher hatten wir die Appli mit einem Obfuscator verschleiert und dann den Endkunden ausgeliefert - aber mit der neuen PlugIn-Funktionalität klappt dies nicht mehr, da ich das Interface ebenfalls verschleiert wird und somit erhalte ich bspw.: java.langClassCastException. Ist mir auch klar, dass die VM

unternehmen.projekt.package1.Class1 (vor Verschleiern)
nicht in
a.b.c.D (nach Verschleiern) casten kann.

Mein Veständnisproblem: Alles was sich ja ändert ist doch nur der Package- und Klassenname, wieso kann er das Objekt trotzdem nicht casten? Gibt es einen work-Around? Irgendetwas so à la serialver?

Natürlich kann ich alle Interfaces und Superklassen vom Verschleiern ausschliessen, aber damit wird dann auch ersichtlich wo ich diese Interfaces / Superklassen selber verwende und damit lässt sich's leichter auf den Code schliessen (ich weiss, dass Obfuscator nicht das Gelbe vom Ei ist) - aber eben.

Kurz:
meine Klasse
a.b.c.D ruft in der Methode x() via Reflection eine Methode aus dem .jar auf, welche ein Objekt vom Typ unternehmen.projekt.package1.Typ1() zurück liefert.
jedoch wurde dieser Typ durch obfuscating in e.f.g.H() umbenannt und somit erhalte ich in a.b.c.D.x() obige Fehlermeldung.

thx & schöne Feiertage
SiS
 
Zurück