通过反射使用方法时,没有此类方法异常

时间:2018-11-30 07:46:28

标签: java reflection

我一直在用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加载类的方式。还请注意,反射代码放置在Web应用程序的Servlet类的doGet方法中,其中,加载的类和被调用的方法驻留在其他非Web应用程序中。同样,通过反射仅使用具有httpservletrequest和response参数的该方法,该类的其他方法也可以正常工作。

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

0 个答案:

没有答案