Reflection: NoSuchMethodException obwohl Methode existiert

nocxsville

Bekanntes Mitglied
Hi,

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 :)
 

musiKk

Top Contributor
Merkwürdig ist, dass wenn ich vor dem getConstrutor(..) Aufruf durch alle Konstruktoren iteriere, ich den Konstruktor finde. Sprich er existiert.

Das macht mich stutzig. Offenbar wird auf manchen Rechnern dort etwas nicht sofort geladen. Mein Rechner gehört "leider" zu denen, auf denen das funktioniert (zumindest in meiner schnell zusammengehackten Variante). Immerhin schließt das solche Fehlerfälle aus, in denen die Klasse aufgrund fehlerhafter Bytes nicht geladen werden konnte.

Hast Du mal die Java-Versionen verglichen (also nicht die Architekturen 32/64bit, sondern... naja... die Java-Version halt)? In meiner 1.6.0_17 von Sun unter 64bit funktionierts jedenfalls.
Das Problem kann eigentlich nichts mit Encodings zu tun haben. Schließlich sollten hier nur uninterpretierte Byte-Arrays im Umlauf sein.

Hast Du mal nach Bug-Reports bei Sun geschaut? Wenn ich dort nach getConstructor suche, finde ich einige. Vielleicht hat jemand anders ein ähnliches Problem.

Wie schauts denn mit [c]getMethod()[/c] aus? Sind dort auch ähnliche Probleme zu finden? Wenn ja, kann die Bug-Suche auch darauf erweitert werden.
 

nocxsville

Bekanntes Mitglied
Hi,

Vorab: Danke für den Hinweis.

Ich habe nun die Ursache für den Fehler gefunden. Ich befinde mich in einer Hudson Umgebung (sorry das hatte ich leider vergessen zu sagen). Dort gibt es einen "uber class loader" der alle geladenen Klassen (Hudson core + plug-ins) kennt. Diesen ClassLoader verwende ich als parent. Der eigentliche Fehler tritt auf, wenn mehrere Plug-ins Klassen eines dritten Plug-ins verwenden. Hintergrund: Die Klassen jedes Plug-ins werden in einem seperaten ClassLoader geladen (auch die verwendeten Klassen anderer Plug-ins). Sprich einige Klassen werden redundant (in verschiedneen ClassLoadern geladen. Wenn man nun dynamisch Klassen läd (byte[] > class) schaut der "uber class loader" ob die Klasse bereits geladen wurde und gibt den ersten Treffer zurück. Lieder ist das nicht immer der richtige. Ich habe nun einiges am Design geändert und nun scheint es zu funktionieren.

Grüße
nocxsville
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
N NoSuchMethodException bei Reflection-Versuch, aber warum? Allgemeine Java-Themen 3
B Reflection gone wrong? Allgemeine Java-Themen 21
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
J Reflection Aufruf: .class durch .dll ersetzen Allgemeine Java-Themen 4
T Reflection - Abprüfen von Klasseneigenschaften Allgemeine Java-Themen 3
perlenfischer1984 Reflection : Element in generische Liste hinzufügen Allgemeine Java-Themen 4
J Reflection-Method Hook? Allgemeine Java-Themen 14
J Reflection mit Klasse und Subklasse Allgemeine Java-Themen 11
X public Getter ersetzen (Reflection?!) Allgemeine Java-Themen 3
A Reflection Problem Allgemeine Java-Themen 15
K Generic class und Reflection Allgemeine Java-Themen 2
G SecurityManager/Policy-File/Reflection Allgemeine Java-Themen 0
N Per Reflection auf (method) local inner class zugreifen? Allgemeine Java-Themen 3
E Reflection? Frage Allgemeine Java-Themen 4
B Reflection, invoke dynamisch befüllen Allgemeine Java-Themen 3
T Reflection Allgemeine Java-Themen 11
G Klassen Cast auf Argumentenklasse via Reflection? Allgemeine Java-Themen 10
H Collections Generics und Reflection Allgemeine Java-Themen 6
TheWhiteShadow Reflection-Lösung für Objektkopien Allgemeine Java-Themen 3
B Reflection: getMethods schlägt fehl (NoClassDefFoundE)) Allgemeine Java-Themen 15
P Reflection "Cast" Allgemeine Java-Themen 5
D Reflection-Performance Allgemeine Java-Themen 7
S Reflection und Generic Allgemeine Java-Themen 9
W Reflection -> getMethod bei optionalen Parametern Allgemeine Java-Themen 4
Kr0e Reflection - Instanz einer Klasse erstellen, ohne Default-Constructor Allgemeine Java-Themen 15
C Probleme mit dem Zugriff auf private Methode per reflection Allgemeine Java-Themen 2
C Zugriff auf private Methode per reflection geht nicht mehr Allgemeine Java-Themen 3
M Probleme mit Reflection Allgemeine Java-Themen 10
A Reflection Konstruktor Parameter Supertyp Allgemeine Java-Themen 2
D Vererbung, Reflection und automatischer Methodenaufruf Allgemeine Java-Themen 24
G Java Reflection Allgemeine Java-Themen 11
brunothg Problem mit Reflection Allgemeine Java-Themen 6
M reflection in inner classes Allgemeine Java-Themen 7
T Class-files zur Laufzeit zu Reflection-Zwecken laden Allgemeine Java-Themen 18
V Reflection - Field-Instanz und Annotations Allgemeine Java-Themen 6
Y Reflection und "extends" Schlüsselwort Allgemeine Java-Themen 3
R Reflection Problem Allgemeine Java-Themen 4
N getName() of reflection Object Allgemeine Java-Themen 4
P Reflection - Wie rufe ich die Felder einer Klasse in einer Methode der Basisklasse? Allgemeine Java-Themen 4
M Reflection Queue auslesen Allgemeine Java-Themen 6
N generic reflection Allgemeine Java-Themen 5
megachucky Java Reflection -> versteckte Felder finden? Allgemeine Java-Themen 3
MQue Reflection Exception Allgemeine Java-Themen 11
R Problem mit Reflection und Generics Allgemeine Java-Themen 3
ruutaiokwu Per Reflection membervariablen überschreiben / zuweisen / nullen Allgemeine Java-Themen 5
T Zugriff per Reflection o.ä. möglich? Allgemeine Java-Themen 18
R Reflection: Membervariablen-Initialwerte Allgemeine Java-Themen 4
G Reflection Allgemeine Java-Themen 6
V reflection in java 5 und 6 Allgemeine Java-Themen 2
C Reflection Übergabeparamter überprüfen? Allgemeine Java-Themen 3
Ark Konstruktor per Reflection nicht bekannt Allgemeine Java-Themen 4
Q Objekte durch Reflection erzeugen Allgemeine Java-Themen 18
G [Reflection + WebService] Methodenaufruf an einem Proxy Allgemeine Java-Themen 11
T Parameternamen mit Reflection-API Allgemeine Java-Themen 14
M reflection mit parametern Allgemeine Java-Themen 8
M Reflection Frage Allgemeine Java-Themen 7
G Code vereinfachen bei Reflection Allgemeine Java-Themen 4
I reflection get inner static classes Allgemeine Java-Themen 2
C Reflection Allgemeine Java-Themen 12
Y Reflection - wie kann ich eine Methode benutzen Allgemeine Java-Themen 4
Y Reflection - wie anwenden/benutzen bei folgendem Problem Allgemeine Java-Themen 3
P Java Reflection API - ResultDataModel ? Allgemeine Java-Themen 3
R Object Dynamisch erzeugen (Reflection API) Allgemeine Java-Themen 22
N Design-Frage: persistent machen per Reflection Allgemeine Java-Themen 3
G Reflection: aktuelle bzw umschliessende Methode? Allgemeine Java-Themen 7
G per Reflection auf private Klassenattribute zugreifen? Allgemeine Java-Themen 9
G Reflection objekt mit generics erzeugen Allgemeine Java-Themen 5
M per reflection private attributsnamen auslesen Allgemeine Java-Themen 3
G Interface - Klassen implementieren das - Reflection ok? Allgemeine Java-Themen 4
C Reflection Problem! Allgemeine Java-Themen 2
G Object cast via Reflection Allgemeine Java-Themen 8
T Reflection und Typsicherheit Allgemeine Java-Themen 5
Q Umgang mit Reflection Allgemeine Java-Themen 4
S reflection Allgemeine Java-Themen 12
X Reflection performant? Allgemeine Java-Themen 11
M Reflection und Serializable Allgemeine Java-Themen 5
A Reflection - Variablen innerhalb einer Methode ermitteln Allgemeine Java-Themen 9
F Performance von Reflection vs Statisches Coden Allgemeine Java-Themen 4
the[V]oid Primitive Arrays per Reflection erzeugen? Allgemeine Java-Themen 2
W Package via Reflection parsen Allgemeine Java-Themen 4
R Interface mittels Reflection implementieren Allgemeine Java-Themen 8
M reflection Integer != int ? Allgemeine Java-Themen 3
M reflection invoce Allgemeine Java-Themen 3
K Reflection:Zugriff auf innere Klassen Allgemeine Java-Themen 4
byte Methodenaufruf per Reflection? Allgemeine Java-Themen 2
M Generics und Reflection Allgemeine Java-Themen 3
M Array per Reflection manipulieren Allgemeine Java-Themen 5
M Klassen von ausserhalb des Jars per Reflection nachladen Allgemeine Java-Themen 2
thE_29 Reflection Allgemeine Java-Themen 6
M statische Methode per reflection aufrufen Allgemeine Java-Themen 2
B Frage zu Reflection Allgemeine Java-Themen 3
V Reflection - Problem Allgemeine Java-Themen 3
clemson Reflection Interface Allgemeine Java-Themen 4
G mit reflection an die felder einer klasse rankommen Allgemeine Java-Themen 4
N Reflection: An Package einer .class-Datei kommen Allgemeine Java-Themen 2
N Reflection: Feststellen ob eine Klasse abstract ist Allgemeine Java-Themen 3
B Reflection Allgemeine Java-Themen 10
C Reflection und variable casten ! Allgemeine Java-Themen 10
C Reflection - Kurze Beschreibung? Allgemeine Java-Themen 3
F Frage zum Thema Reflection Allgemeine Java-Themen 13

Ähnliche Java Themen


Oben