Java: InvocationTargetException

Я динамически создаю классы на Java и пытаясь вызывать в них методы, однако иногда я получаю java.lang.reflect.InvocationTargetException.

PageGenerator1.java(динамически созданный)

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>");
    }
}

Я пытаюсь вызвать его так:

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

и это запись в журнале, которую я получаю:

INFO: попытка вызова метода
public void cs236369.webserver.requesthandlers.tsp.PageGenerator1.generate(java.io.PrintStream,java.util.Map,cs236369.webserver.requesthandlers.tsp.Session)
с примером cs236369.webserver.requesthandlers.tsp.PageGenerator1
со следующими параметрами:
        params: {name=Amir}
        cookieSession: {counter=5}

Исключение, которое я получаю, не имеет сообщения, и я не испытываю рефлексии и т.д., поэтому я не уверен, что означает ошибка. Можете ли вы объяснить, что я делаю неправильно?

Ответ 1

InovcationTargetException означает, что метод, который вы вызывали, вызвал исключение. Чтобы выяснить, в чем проблема с вашим методом, заверните вызов метода вызова вокруг блока try-catch и запишите invocationTargetException.getTargetException().

Я вижу несколько мест в вашем методе generateMethod, которые могут иметь ошибки. Session может быть null, session.getCounter() передается в Integer - там может быть классное исключение.

Ответ 2

Поместите try catch catch как в ваш код вызова, так и в генерируемые блоки. Кроме того, вы можете также пройти через методы в отладчике.

Ответ 3

Возможно, это из-за неправильных параметров. Сначала проверьте свои параметры. Используйте e.getCause(). GetCause(), чтобы получить фактическую причину этого.