java.lang.reflect.InvocationTargetException

java.lang.reflect.InvocationTargetException
at 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)
这个异常怎么解决???

再思考下,我提出的方法也是无用的。
因为在父类中实在无法知道子类的类型,以及其有些什么方法。
你可能需要用到泛型。

catch异常,
[code="java"]try{}
catch(e){
System.out.println(e.getTargetException());
}[/code]

getTargetException里有异常详细信息

at com.adr.common.struts.BaseAction.execute(BaseAction.java:84)

这里呀,,

光看这个很难发现问题的,把你的web.xml struts-config applicationContext.xml以及相关的代码拿出来才好发现问题

反射出错么一般是配置文件有问题,可能是配置的action中哪里写错了

不明白你为什么要通过反射调用呢,你现在的action都是交给spring来管理的啊。action的调用是有spring去做的啊。

[code="java"]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;
}
}[/code]

我还是坚持错误是出现在这里的:
forward = (ActionForward) met.invoke(this, args);

但是从语法上来讲,个人感觉没多大问题

[code="java"]forward = (ActionForward) met.invoke(this, args)[/code]
这里的this是指baseaction类,虽然其instance为继承baseaction的具体action。
但是明显,这个this中是不存在扩展的那些方法的。

如果this能够提供一个具体的对象,应当可以解决这个错误

[quote]求详情,,,过程![/quote]
其实我想我解释清楚了。
上面相当于这样
[code="java"]class baseAction(){
execute(){
this.dosth();
}
}

class standardaction(){
execute(){
super.execute();
}

dosth(){

}
}[/code]

这是一个典型的继承与多态的实例。但是父类中的方法明显是错的,要将this.dosth()改为dosth()才能正常运行。

但是,由于你是使用的反射,那么在参数中必定要传入一个对象,而这个对象原生是支持dosth方法的。
我有个办法,只是不知道有没有更好的。将以上逻辑改为:
[code="java"]class baseaction(){
obj;

execute(){
obj.dosth();
}
}

class standardaction(){
standardaction(){
obj = this;
}

exeute(){
super.execute();
}

dosth(){

}
}[/code]

这是就将你需要反射的对象给传给了父类,就是在父类中总能找到当前实体。。

不明白楼主为什么使用反射调用,还有就是在action里那么多的getParameter方法调用看着挺乱的,为啥不整一个form呢。