Я запачкал свои руки отражением 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());
}