15

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
  • which line is the exception on? Commented Jun 17, 2011 at 15:29
  • 1
    the generateMethod.invoke one. Sorry, I thought it was clear. Commented Jun 17, 2011 at 15:40
  • 2
    InvocationTargetException means the the invoked method threw an exception, you need to know what the cause was to have much hope of understanding the problem. Commented Jun 17, 2011 at 15:57

3 Answers 3

27

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.

Sign up to request clarification or add additional context in comments.

Comments

0

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.

Comments

0

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.