Нет такого исключения метода при использовании метода через отражение - PullRequest
0 голосов
/ 30 ноября 2018

Я запачкал свои руки отражением Java и столкнулся с небольшим препятствием.Если я пытаюсь вызвать следующий метод с помощью отражения, я получаю java.lang.NoSuchMethodException: org.demonking.CrossHandler.HandleRequest(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) брошенный.

Вот код метода:

public void HandleRequest(HttpServletRequest req,HttpServletResponse resp)
{
    try{
        System.out.println("i am here");

        //RequestDispatcher view = req.getRequestDispatcher("CrossFile.jsp");
        // don't add your web-app name to the path
       // view.forward(req, resp); 
    }catch(Exception ex)
    {
        System.out.println("in exception");
    }
}

, а вот код отражения:

try {
    Method m=cls.getMethod("HandleRequest", HttpServletRequest.class,HttpServletResponse.class); // error on this line
    //Object obj=cls.newInstance();
    //m.invoke(obj,new Object[]{req,resp});
} catch (Exception ex) {
    ex.printStackTrace();
    System.out.println(ex.getCause());
}

Обратите внимание, что другие методы, вызываемые с помощью отражения, прекрасно работают.

Вот как я загружаю класс с помощью classloader. Также обратите внимание, что код отражения помещается в метод doGet класса сервлетавеб-приложение, в котором загруженный класс и вызываемый метод находятся в другом не-веб-приложении. Кроме того, другие методы того же класса работают просто отлично, только с помощью отражения этот метод, имеющий httpservletrequest и параметры ответа, не работает.

File file = new File("C:\\Users\\Demonking\\Documents\\eclipseprojects\\ADemoOne\\bin\\");
            URL url = file.toURI().toURL();
            URL[] urls = new URL[] { url};
            ClassLoader cl = new URLClassLoader(urls);
            Class<?> cls = cl.loadClass("org.demonking.CrossHandler");
            try {
                 Method m=cls.getMethod("HandleRequest", HttpServletRequest.class,HttpServletResponse.class);
                 Object obj=cls.newInstance();
                 m.invoke(obj,new Object[]{req,resp});
            } catch (Exception ex) 
            {
                ex.printStackTrace();
                System.out.println(ex.getCause());
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...