IllegalArgumentException bei Method.invoke()

Status
Nicht offen für weitere Antworten.

faetzminator

Gesperrter Benutzer
Hallo Zusammen

ich habe einen Softwarecore, welcher anhand eines XML's bestimmte Module laden soll. Danach versucht er, diese gegenseitig zu "linken". Auf alle Fälle ruft er setter von Modulen auf, bei welchen er andere Module übergibt. Dies sieht folgendermassen aus:
Code:
	private void linkModules(ArrayList<ModuleInterface> modules) throws Exception {
		for (int i = 0; i < modules.size(); i++) {
			ModuleInterface module = modules.get(i);
			String name = getSetterMethodName(module.getClass().getSimpleName());
			for (int j = 0; j < modules.size(); j++) {
				ModuleInterface mod = modules.get(j);
				// TODO implement better way - faetzminator
				try {
					Method meth = mod.getClass().getMethod(name, new Class<?>[] {module.getClass()});
					meth.invoke(mod, new Object[] {module});
					System.out.println("invoked " + mod.getClass().getName() + "." + name + "(" + module.getClass().getName() + ")");
				} catch (NoSuchMethodException e) {
					// ignore
				} catch (IllegalAccessException e) {
					// ignore
				} catch (InvocationTargetException e) {
					// ignore
				}
			}
		}
	}

Nun, wenn ich in Eclipse alle Packages im gleichen Projekt habe, funktioniert das auch wunderbar, wenn ich das Package aber in ein anderes Projekt nehme (und der System CL somit die zu ladenden Klassen nicht sieht) krieg ich beim invoke() eine nichtssagende Exception:
Code:
java.lang.IllegalArgumentException
   at java.lang.reflect.Method.invoke(libgcj.so.90)
   at ch.faetzminator.ircwaynebot.core.ModuleHandler.linkModules(ModuleHandler.java:74)
   at ch.faetzminator.ircwaynebot.core.ModuleHandler.loadModules(ModuleHandler.java:46)
   at ch.faetzminator.ircwaynebot.core.IrcWayneBot.start(IrcWayneBot.java:40)
   at ch.faetzminator.ircwaynebot.core.IrcWayneBot.main(IrcWayneBot.java:136)

Kennt jemand die Lösung zum Problem?

Gruss, faetzminator

PS: ich verwende
java version "1.5.0"
gij (GNU libgcj) version 4.3.2
 
S

SlaterB

Gast
wieso bekommst du überhaupt eine Exception-Ausgabe, du hast doch überall ignore..
(edit: ok, nicht bei IllegalArgumentException, vielleicht ist das eine ganz normale Reakion der fraglichen Methode?)

ich würde loggen, an welcher Stelle das genau passiert und an dieser dann die testweise auf die entsprechenden Klassen und Methoden normal zugreifen

also
if (Exception-Fall) {
TypeA a = (TypeA) parameterA;
TypeB b = (TypeB) parameterB;
..
TypcX x = (TypeC) objectToCall;
x.methodToCall(a, b, ..);
}

usw.
und schauen ob dabei sinnhaftere Fehlermeldungen wie ClassNotFound, ClassCast usw. auftreten mit genauer Zeilennummer

Pech ist, wenn du einen solchen Code gar nicht kompilieren kannst, weil die Klassen an dieser Stelle unbekannt sind,
dann prüfe eben so mehr Logging und verwende vielleicht Class.forName(), Class.isAssignable() usw

vielleicht sind irgendwelche Klassen nicht vorhanden oder in falscher Version/ in mehreren Versionen

edit:
>
libgcj.so.90
klingt ja böse, vielleicht etwas, zu dem meine Standardantworten nicht weiterhelfen :)
 
Zuletzt bearbeitet von einem Moderator:

faetzminator

Gesperrter Benutzer
Dies ist der einzige Ort im Projekt, an dem ich (momentan noch, TODO gesehen?) Exceptions abfange, so kann ich einfach alles miteinander kreuzen (, egal ob die Methoden vorhanden und public sind). Und diese IllegalArgumentException wird NICHT abgefangen, was sie auch nicht sollte.
Zu deinen Aussagen:
- Es wird erst hier eine Exception geworfen, die Objekte wurden von einem URLClassLoader geladen und sind ok
- Natürlich kommen keine sinnvollere Exceptions, weil diese die einzige ist

EDIT:
naja, ich habe mich auch schon gefragt ob es wohl an einem Bug (Feature ;) ) meiner JVM liegt und ob ich die Sun Version installieren sollte.
 
Zuletzt bearbeitet:
M

maki

Gast
ich habe einen Softwarecore, welcher anhand eines XML's bestimmte Module laden soll. Danach versucht er, diese gegenseitig zu "linken". Auf alle Fälle ruft er setter von Modulen auf, bei welchen er andere Module übergibt.
Solltest dir mal bei Gelegenheit OSGi ansehen.
 

faetzminator

Gesperrter Benutzer
Solltest dir mal bei Gelegenheit OSGi ansehen.
Werd ich mal machen. Das Umsteigen auf Sun's Java war wirklich die Lösung. Hatte da aber Schwierigkeiten mit der java.policy.

Nun fällt er einfach schon eine Zeile höher mit einer NoSuchMethodException auf die Schnauze...

Gruss, faetzminator
 
Zuletzt bearbeitet:
S

Spacerat

Gast
Ich glaub' nu' kann ich mir zumindest auch vorstellen warum: Bei "getMethod()" werden in deinem Code schlicht die falschen Parametertypen (nämlich die Instanz-Klasse von "modul") übergeben. Da müsste "ModuleInterface.class" stehen. Selbst wenn "modul" eine Instanz von "ModuleInterface" ist, wird das von "getMethod()" nicht erkannt. Wenn das nicht verständlich ist, hilft hoffentlich diese Codezeile:
Code:
Method meth = mod.getClass().getMethod(name, new Class<?>[] {ModuleInterface.class});
 

faetzminator

Gesperrter Benutzer
Hab das Verzeichnis der zu ladenden Dateien in den Classpath genommen und dann funktionierts super ( - finde ich zwar etwas komisch).
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M IllegalArgumentException Allgemeine Java-Themen 9
MiMa IllegalArgumentException Allgemeine Java-Themen 4
T komplizierter Comparator (IllegalArgumentException) Allgemeine Java-Themen 3
VfL_Freak IllegalArgumentException beim Obfuskieren mit ProGuard V4.4 Allgemeine Java-Themen 6
hdi Javadoc Comments: IllegalArgumentException deklarieren? Allgemeine Java-Themen 3
M IllegalArgumentException oder Exception werfen? Allgemeine Java-Themen 18
B Null- oder IllegalArgumentException Allgemeine Java-Themen 12
mrStudent The method append is not applicable for the arguments (Queue<Integer>, Queue<Integer>) Allgemeine Java-Themen 4
J Final Method Allgemeine Java-Themen 9
R Delete files before creating new from temp using Java file method Allgemeine Java-Themen 1
J Reflection-Method Hook? Allgemeine Java-Themen 14
B Exception in Application init method Allgemeine Java-Themen 5
M Lambda "invalid method reference no suitable method found" Allgemeine Java-Themen 2
Thallius JSONArray - the method length() is undefined for JSONArray Allgemeine Java-Themen 4
N Per Reflection auf (method) local inner class zugreifen? Allgemeine Java-Themen 3
C Method Area, Stack, Heap Allgemeine Java-Themen 7
R Stop a method??? Allgemeine Java-Themen 34
R Merkwürdiges Verhalten der equals Method Allgemeine Java-Themen 4
D Invalid Method declaration Allgemeine Java-Themen 5
N Method-Annotations in aufgerufener Methode auswerten Allgemeine Java-Themen 2
I Template Method pattern mit "geschützten Methoden" Allgemeine Java-Themen 5
X Cannot refer to a non-final variable settings inside an inner class defined in a different method Allgemeine Java-Themen 4
G JavaDoc: Spezielle Beschreibung nur in Method Detail Allgemeine Java-Themen 5
R Fehler:method does not override a method from its superclass Allgemeine Java-Themen 3
G javax.jms.IllegalStateException: This method. Allgemeine Java-Themen 4
K Bound mismatch: The generic method sort(List<T>) of ty Allgemeine Java-Themen 4
G Taushen der Input variablen einer method Allgemeine Java-Themen 14
R The mark method of InputStream does nothing. Allgemeine Java-Themen 4
J httpclient: Post-method aber trotzdem "URI to long&quot Allgemeine Java-Themen 4
G Error: Hashtable Type safety: The method put(Object, Object) Allgemeine Java-Themen 6
J Method.invoke -> Exceptions der Funktion abfangen Allgemeine Java-Themen 5
padde479 The static method sleep(long) from the type Thread should. Allgemeine Java-Themen 2
C Code of a method longer than 65535 bytes Allgemeine Java-Themen 3
K The method clone() from the type Object is not visible. Allgemeine Java-Themen 9
O Pointer/reference on method Allgemeine Java-Themen 10
BRoll Methode abbrechen (Invoke von außen) Allgemeine Java-Themen 5
B Reflection, invoke dynamisch befüllen Allgemeine Java-Themen 3
H Unterschied EventQueue.invoke... und thread.start() Allgemeine Java-Themen 4
S Reflections (invoke-Methode) Allgemeine Java-Themen 13
S Active-X Call / Invoke?` Allgemeine Java-Themen 7
kenny1987 Frage zu getMethod und invoke Allgemeine Java-Themen 9
P invoke per button Allgemeine Java-Themen 5
T invoke() einer Methode - Probleme mit Rückgabewert Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben