Hallo liebes Java Forum,
gerade angemeldet und eigentlich geplant hier den ersten Post zu machen, jetzt wirds doch der zweite :lol:
Ich komme mit etwas Verzweiflung auf der Suche nach Hilfe zu euch, denn mein momentanes Projekt das ich gerade in meiner Praxisphase bearbeiten darf scheint mir noch den letzten Nerv zu rauben ;(
Nehmen wir mal an ich habe ein Programm welches es dem User erlaubt zur Laufzeit neue Klasse zu importieren bzw. zu spezifizieren. Diese Klassen (samt Methoden, Variablen usw,) bekomme ich also zur Laufzeit meines Programms als String geliefert.
Nun erlaube ich so auch dem User ganze OOP Strukturen wie Vererbung, Abstract usw. dort mit einzubauen. Da aber die lieben User min. so oft Fehler machen wie ich, möchte ich diese Strukturen ja überprüfen bevor ich am Ende daraus versuche ein Ergebnis oder ähnliches zu erzeugen.
Gehen wir also von dem Beispiel aus der User liefert folgende zwei Strings ein:
"abstract class AbstractComponent { public abstract void a () ; }"," public class ConcreteComponentA extends AbstractComponent {}"
Dann sollte das Ergebnis natürlich sein, das ich einen Fehler erhalte bezüglich der fehlenden Implementierung der Methode a.
Meine ersten Versuche gingen bisher in Richtung Bytecode Instrumentierung, insofern das ich aus den Strings Klassen & Methoden per Javassist erstellt habe und daraufhin eine Verifikation erhofft hatte, da dies auch kein Erfolg brachte hatte ich angefangen mit JustIce dem Bytecode Verifier von BCEL zu arbeiten, was auch keine Lösung brachte da hier auf alles andere aber nicht das gewünschte gecheckt wurde.
Nach einigen Fragen im Stackoverflow hatte ich dann den Weg über den ClassLoader gesucht, allerdings hatte hier auch keine gewünschte Prüfung stattgefunden...
JUnit Tests oder ähnliches kommen leider nicht in Frage da ich ja nicht im vorraus sagen kann was der User für Ideen in die Strings einbaut ...
Meine letzte Idee und Hoffnung wäre nun die Kompilierung über einen internen Compiler zur Runtime aus dem Memory, allerdings waren die ersten Tests bezüglich der gewünschten "Fehler" eher ernüchternt.
Vielleicht noch ein kleiner Hinweis, mir geht es nicht darum die Integrität des Bytecodes oder der Methodendefinitionen zu prüfen, da diese sowieso immer leer sein sollten, es geht hier wirklich essentiell darum Klassenstrukturen wie Vererbung und derartiges zu prüfen!
Vielen Dank für die Bemühungen und Hilfsversuche
Gruß
Evils
gerade angemeldet und eigentlich geplant hier den ersten Post zu machen, jetzt wirds doch der zweite :lol:
Ich komme mit etwas Verzweiflung auf der Suche nach Hilfe zu euch, denn mein momentanes Projekt das ich gerade in meiner Praxisphase bearbeiten darf scheint mir noch den letzten Nerv zu rauben ;(
Nehmen wir mal an ich habe ein Programm welches es dem User erlaubt zur Laufzeit neue Klasse zu importieren bzw. zu spezifizieren. Diese Klassen (samt Methoden, Variablen usw,) bekomme ich also zur Laufzeit meines Programms als String geliefert.
Nun erlaube ich so auch dem User ganze OOP Strukturen wie Vererbung, Abstract usw. dort mit einzubauen. Da aber die lieben User min. so oft Fehler machen wie ich, möchte ich diese Strukturen ja überprüfen bevor ich am Ende daraus versuche ein Ergebnis oder ähnliches zu erzeugen.
Gehen wir also von dem Beispiel aus der User liefert folgende zwei Strings ein:
"abstract class AbstractComponent { public abstract void a () ; }"," public class ConcreteComponentA extends AbstractComponent {}"
Dann sollte das Ergebnis natürlich sein, das ich einen Fehler erhalte bezüglich der fehlenden Implementierung der Methode a.
Meine ersten Versuche gingen bisher in Richtung Bytecode Instrumentierung, insofern das ich aus den Strings Klassen & Methoden per Javassist erstellt habe und daraufhin eine Verifikation erhofft hatte, da dies auch kein Erfolg brachte hatte ich angefangen mit JustIce dem Bytecode Verifier von BCEL zu arbeiten, was auch keine Lösung brachte da hier auf alles andere aber nicht das gewünschte gecheckt wurde.
Nach einigen Fragen im Stackoverflow hatte ich dann den Weg über den ClassLoader gesucht, allerdings hatte hier auch keine gewünschte Prüfung stattgefunden...
JUnit Tests oder ähnliches kommen leider nicht in Frage da ich ja nicht im vorraus sagen kann was der User für Ideen in die Strings einbaut ...
Meine letzte Idee und Hoffnung wäre nun die Kompilierung über einen internen Compiler zur Runtime aus dem Memory, allerdings waren die ersten Tests bezüglich der gewünschten "Fehler" eher ernüchternt.
Vielleicht noch ein kleiner Hinweis, mir geht es nicht darum die Integrität des Bytecodes oder der Methodendefinitionen zu prüfen, da diese sowieso immer leer sein sollten, es geht hier wirklich essentiell darum Klassenstrukturen wie Vererbung und derartiges zu prüfen!
Vielen Dank für die Bemühungen und Hilfsversuche
Gruß
Evils
Zuletzt bearbeitet von einem Moderator: