2011-06-17 6 views
10

Estoy creando dinámicamente clases en Java e intentando invocar métodos en ellas, sin embargo, a veces obtengo un java.lang.reflect.InvocationTargetException.Java: InvocationTargetException

PageGenerator1.java (creado de forma dinámica)

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

Estoy tratando de invocar este modo:

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

y esta es la entrada del registro de recibo:

INFORMACIÓN: Intentando invocar el método
public void cs236369.webserver.requesthandlers.tsp.PageGenerator1.generate(java.io.PrintStream,java.util.Map,cs236369.webserver.requesthandlers.tsp.Session)
con una instancia de
cs236369.webserver.requesthandlers.tsp.PageGenerator1
con los siguientes parámetros:
params: {name=Amir}
cookieSession: {counter=5}

La excepción que estoy recibiendo no tiene un mensaje, y estoy no tiene experiencia con la reflexión, etc. por lo que no estoy seguro de lo que significa el error. ¿Puedes ayudarme a explicar qué estoy haciendo mal?

+0

¿En qué línea está la excepción? – Bozho

+1

el 'generateMethod.invoke' uno. Lo siento, pensé que estaba claro. –

+2

InvocationTargetException significa que el método invocado arrojó una excepción, necesita saber cuál era la causa para tener muchas esperanzas de comprender el problema. –

Respuesta

22

InovcationTargetException significa que el método que invocó arrojó una excepción. Para descubrir cuál es el problema con su método en sí, ajuste la llamada al método de invocación alrededor de un bloque try-catch y regístrese invocationTargetException.getTargetException().

Puedo ver varios lugares en tu método generate que podrías tener errores. La sesión podría ser nula, session.getCounter() se está enviando a Entero; podría haber una excepción de clase-clase allí.

0

Ponga try catch blocks tanto en el código de invocación como en los bloques de generación. Además, también puede pasar por los métodos en un depurador.

0

Puede deberse a parámetros incorrectos. Primero, verifica tus parámetros. Use e.getCause(). GetCause() para obtener la causa real detrás de esto.