Hi,
Ich möchte eine Instanz einer neuen (dynamisch geladenen) Klasse erzeugen. Ich verwende dazu folgenden (gekürzten) Code:
Hier die super Klasse:
Und hier die Klasse, die sich in der Datenbank befindet:
loadClassFromByteArray(byte[]) erzeugt mit Hilfe von ClassLoader.defineClass(...) die Klasse. Das byte[] wird (ohne Konvertierung) aus einer Datenbank geladen. Soweit so gut. Auf einigen Rechnern wirft getConstructor(...) eine NoSuchMethodException mit der Meldung, das es keinen Konstruktor mit den Parametern String, Integer gibt. Wie gesagt, die Exception wird nur auf einigen Rechnern geworfen, auf anderen Rechnern funktioniert der Code. Merkwürdig ist, dass wenn ich vor dem getConstrutor(..) Aufruf durch alle Konstruktoren iteriere, ich den Konstruktor finde. Sprich er existiert.
Ich habe nun schon einige Zeit geopfert, die Unterschiede der einzelnen Rechner zu analysieren.
- verschiedene JVM Versionen (32 Bit / 64 Bit)
- verschiedene Encodings
Leider ohne Erfolg.
Hat einer von euch eine Idee was man noch testen könnte, bzw. woran es liegen könnte? Könnte es evtl. an der Vererbung liegen (nur warum funktioniert es dann auf einigen Rechnern?
Vielen Dank im voraus
Ich möchte eine Instanz einer neuen (dynamisch geladenen) Klasse erzeugen. Ich verwende dazu folgenden (gekürzten) Code:
Java:
Class<?extends MySuperClass> clazz = loadClassFromByteArray(array);
MySuperClass instance = clazz.getConstructor(String.class, Integer.class).newInstance("Hallo", Integer.valueOf(12));
Hier die super Klasse:
Java:
public class MySuperClass<T> {
// ...
public MySuperClass(String name, Integer value) {
// ...
}
// ...
}
Und hier die Klasse, die sich in der Datenbank befindet:
Java:
public class MySubClass extends MySuperClass<Integer> {
// ...
public MySubClass(String name, Integer value) {
super(name, value);
// ...
}
// ...
}
loadClassFromByteArray(byte[]) erzeugt mit Hilfe von ClassLoader.defineClass(...) die Klasse. Das byte[] wird (ohne Konvertierung) aus einer Datenbank geladen. Soweit so gut. Auf einigen Rechnern wirft getConstructor(...) eine NoSuchMethodException mit der Meldung, das es keinen Konstruktor mit den Parametern String, Integer gibt. Wie gesagt, die Exception wird nur auf einigen Rechnern geworfen, auf anderen Rechnern funktioniert der Code. Merkwürdig ist, dass wenn ich vor dem getConstrutor(..) Aufruf durch alle Konstruktoren iteriere, ich den Konstruktor finde. Sprich er existiert.
Ich habe nun schon einige Zeit geopfert, die Unterschiede der einzelnen Rechner zu analysieren.
- verschiedene JVM Versionen (32 Bit / 64 Bit)
- verschiedene Encodings
Leider ohne Erfolg.
Hat einer von euch eine Idee was man noch testen könnte, bzw. woran es liegen könnte? Könnte es evtl. an der Vererbung liegen (nur warum funktioniert es dann auf einigen Rechnern?
Vielen Dank im voraus