Java: InvocationTargetException

2019-04-20 22:30发布

I am dynamically creating classes in Java and trying to invoke methods in them, however, sometimes I get a java.lang.reflect.InvocationTargetException.

PageGenerator1.java (dynamically created)

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

I am trying to invoke it like so:

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

and this is the log entry I get:

INFO: Attempting to invoke the method
public void cs236369.webserver.requesthandlers.tsp.PageGenerator1.generate(java.io.PrintStream,java.util.Map,cs236369.webserver.requesthandlers.tsp.Session)
with an instance of
cs236369.webserver.requesthandlers.tsp.PageGenerator1
with the following parameters:
params: {name=Amir}
cookieSession: {counter=5}

The exception I'm getting doesn't have a message, and I'm not experienced with reflection, etc. so I'm not sure what the error means. Can you help explain what am I doing wrong?

3条回答
SAY GOODBYE
2楼-- · 2019-04-20 23:11

Put try catch blocks in both your invocation code as well as the generate blocks. Additionally, you can also step through the methods in a debugger.

查看更多
Fickle 薄情
3楼-- · 2019-04-20 23:23

InovcationTargetException means that the method that you invoked threw an exception. To figure out what the problem is with your method itself, wrap the invoke method call around a try-catch block and log invocationTargetException.getTargetException().

I can see several places in your generateMethod that you could have errors. Session could be null, session.getCounter() is being cast to Integer -- there could be a classcastexception there.

查看更多
成全新的幸福
4楼-- · 2019-04-20 23:35

It may be because of wrong parameters. First, check your parameters. Use e.getCause().getCause() to get actual cause behind this.

查看更多
登录 后发表回答