问题描述
java.lang.reflect.InvocationTargetExceptionat sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)at java.lang.reflect.Method.invoke(Method.java:585)at com.adr.common.struts.BaseAction.execute(BaseAction.java:84)at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:106)at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:174)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)at com.adr.common.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:62)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)at java.lang.Thread.run(Thread.java:595)这个异常怎么解决??? 问题补充:那这代码要写在什么地方? 请指教!蔡华江 写道
解决方案
再思考下,我提出的方法也是无用的。因为在父类中实在无法知道子类的类型,以及其有些什么方法。你可能需要用到泛型。
解决方案二:
不明白楼主为什么使用反射调用,还有就是在action里那么多的getParameter方法调用看着挺乱的,为啥不整一个form呢。
解决方案三:
引用求详情,,,过程!其实我想我解释清楚了。上面相当于这样class baseAction(){ execute(){ this.dosth(); }}class standardaction(){ execute(){ super.execute(); } dosth(){ }}这是一个典型的继承与多态的实例。但是父类中的方法明显是错的,要将this.dosth()改为dosth()才能正常运行。但是,由于你是使用的反射,那么在参数中必定要传入一个对象,而这个对象原生是支持dosth方法的。我有个办法,只是不知道有没有更好的。将以上逻辑改为:class baseaction(){ obj; execute(){ obj.dosth(); }}class standardaction(){ standardaction(){ obj = this; } exeute(){ super.execute(); } dosth(){ }}这是就将你需要反射的对象给传给了父类,就是在父类中总能找到当前实体。。
解决方案四:
forward = (ActionForward) met.invoke(this, args)这里的this是指baseaction类,虽然其instance为继承baseaction的具体action。但是明显,这个this中是不存在扩展的那些方法的。如果this能够提供一个具体的对象,应当可以解决这个错误
解决方案五:
try {Class objClass = this.getClass();Class types[] = { ActionMapping.class, ActionForm.class,HttpServletRequest.class, HttpServletResponse.class };Object args[] = { mapping, form, request, response };met = objClass.getMethod(method, types);forward = (ActionForward) met.invoke(this, args);return forward;} catch (Exception e) {if (response.isCommitted()) {return null;} else {forward = mapping.findForward("error");request.setAttribute("exception", e);e.printStackTrace();return forward;}}我还是坚持错误是出现在这里的:forward = (ActionForward) met.invoke(this, args);但是从语法上来讲,个人感觉没多大问题
解决方案六:
不明白你为什么要通过反射调用呢,你现在的action都是交给spring来管理的啊。action的调用是有spring去做的啊。
解决方案七:
反射出错么一般是配置文件有问题,可能是配置的action中哪里写错了
解决方案八:
光看这个很难发现问题的,把你的web.xml struts-config applicationContext.xml以及相关的代码拿出来才好发现问题
解决方案九:
at com.adr.common.struts.BaseAction.execute(BaseAction.java:84) 这里呀,,
解决方案十:
catch异常,try{}catch(e){ System.out.println(e.getTargetException());}getTargetException里有异常详细信息