Domanda Java: InvocationTargetException


Sto creando dinamicamente le classi in Java e provando a invocare metodi in esse, tuttavia, a volte ottengo un java.lang.reflect.InvocationTargetException.

PageGenerator1.java (creato dinamicamente)

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

Sto cercando di invocarlo in questo 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);

e questa è la voce del registro che ottengo:

INFO: tentativo di richiamare il metodo
public void cs236369.webserver.requesthandlers.tsp.PageGenerator1.generate(java.io.PrintStream,java.util.Map,cs236369.webserver.requesthandlers.tsp.Session)
  con un'istanza di
cs236369.webserver.requesthandlers.tsp.PageGenerator1
  con i seguenti parametri:
          params: {name=Amir}
          cookieSession: {counter=5}

L'eccezione che sto ricevendo non ha un messaggio, e non ho esperienza di riflessioni, ecc. Quindi non sono sicuro di cosa significhi l'errore. Puoi aiutarmi a spiegare cosa sto sbagliando?


10
2018-06-17 15:24


origine


risposte:


InovcationTargetException significa che il metodo invocato ha generato un'eccezione. Per capire qual è il problema con il metodo stesso, avvolgere la chiamata del metodo invoke attorno a un blocco try-catch e registrare invocationTargetException.getTargetException().

Posso vedere diversi punti nel tuo generateMethod che potresti avere degli errori. Session potrebbe essere nullo, session.getCounter () viene lanciato su Integer - potrebbe esserci una classcastexception lì.


22
2018-06-17 15:56



Metti i blocchi di catch try sia nel codice di invocazione che nei blocchi di generazione. Inoltre, è anche possibile scorrere i metodi in un debugger.


0
2018-06-17 16:35



Potrebbe essere a causa di parametri errati. Innanzitutto, controlla i tuoi parametri. Usa e.getCause (). GetCause () per ottenere una causa reale dietro a questo.


0
2018-06-17 19:19