Java: InvocationTargetException - PullRequest
       0

Java: InvocationTargetException

10 голосов
/ 17 июня 2011

Я динамически создаю классы в 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);

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

ИНФОРМАЦИЯ: Попытка вызвать метод
public void cs236369.webserver.requesthandlers.tsp.PageGenerator1.generate(java.io.PrintStream,java.util.Map,cs236369.webserver.requesthandlers.tsp.Session)
с экземпляром
cs236369.webserver.requesthandlers.tsp.PageGenerator1
со следующими параметрами:
параметры: {name=Amir}
cookieSession: {counter=5}

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

Ответы [ 3 ]

22 голосов
/ 17 июня 2011

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

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

0 голосов
/ 17 июня 2017

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

0 голосов
/ 17 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...