web-dev-qa-db-fra.com

Java: InvocationTargetException

Je crée dynamiquement des classes en Java et j'essaie d'y appeler des méthodes. Cependant, parfois, je reçois un Java.lang.reflect.InvocationTargetException

PageGenerator1.Java (créé dynamiquement)

import Java.io.PrintStream;
import Java.util.Map;
public class PageGenerator1 implements DynamicPageGenerator {
    public PageGenerator1() {
    }

    @Override
    public void generate(PrintStream out, Map<String,String> params, Session session) {
        out.print("<html>\r\n<body>\r\n");
        if (session.get("counter") == null) {
                session.set("counter", 2);
                out.println("<h1>Hi "+params.get("name")+" this is your first visit</h1>");
        } else {
                out.println("<h1>This is your "+session.get("counter")+" visit</h1>");
                session.set("counter", 1+((Integer)session.get("counter")));
        }
        out.print("\r\n</body>\r\n</html>");
    }
}

J'essaye de l'invoquer comme suit:

    logger.info(
        "Attempting to invoke the method " + generateMethod + " with an instance of " + generatedClassName + "with the following parameters:\n" +
            "\tparams: " + params + "\n" +
            "\tcookieSession: " + cookiesSession
    );

    generateMethod.invoke(Class.forName(generatedClassName).newInstance(), ps, params, cookiesSession);

et voici l'entrée du journal que je reçois:

INFO: tentative d'invocation de la méthode
public void cs236369.webserver.requesthandlers.tsp.PageGenerator1.generate(Java.io.PrintStream,Java.util.Map,cs236369.webserver.requesthandlers.tsp.Session)
avec une instance de
cs236369.webserver.requesthandlers.tsp.PageGenerator1
avec les paramètres suivants:
paramètres: {name=Amir}
cookieSession: {counter=5}

L'exception que je reçois n'a pas de message, et je ne suis pas expérimenté en réflexion, etc., donc je ne suis pas sûr de ce que l'erreur signifie. Pouvez-vous aider à expliquer ce que je fais mal?

10
Amir Rachum

InovcationTargetException signifie que la méthode que vous avez appelée a généré une exception. Pour comprendre le problème de votre méthode elle-même, enroulez l'appel de méthode invoke autour d'un bloc try-catch et connectez-vous invocationTargetException.getTargetException().

Je peux voir plusieurs endroits dans votre generateMethod où vous pourriez avoir des erreurs. Session pourrait être null, session.getCounter () est converti en Integer - il pourrait y avoir une exception classcastexception.

22
Kal

Cela peut être dû à de mauvais paramètres. Tout d'abord, vérifiez vos paramètres. Utilisez e.getCause (). GetCause () pour obtenir la cause réelle derrière cela.

0
Deepak Vajpayee

Mettez try catch blocks à la fois dans votre code d’invocation et dans les blocs de génération. En outre, vous pouvez également parcourir les méthodes dans un débogueur.

0
Basanth Roy