简体   繁体   中英

Java: InvocationTargetException

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?

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.

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

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM