java.lang.RuntimeException: java.lang.reflect.InvocationTargetException

本人纯属虚构 发布于 2015/01/23 21:14
阅读 7K+
收藏 0

@JFinal 你好,想跟你请教个问题:


java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
	at com.jfinal.core.ActionInvocation.invoke(ActionInvocation.java:61)
	at com.qqtool8.controller.PermissionInterceptor.intercept(PermissionInterceptor.java:42)
	at com.jfinal.core.ActionInvocation.invoke(ActionInvocation.java:51)
	at com.jfinal.core.ActionHandler.handle(ActionHandler.java:77)
	at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:72)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:197)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
	at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1822)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.GeneratedMethodAccessor38.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at com.jfinal.core.ActionInvocation.invoke(ActionInvocation.java:55)
	... 19 more
Caused by: java.lang.StackOverflowError
	at atg.taglib.json.util.JSONTokener.nextValue(JSONTokener.java:322)
	at atg.taglib.json.util.JSONArray.<init>(JSONArray.java:124)
	at atg.taglib.json.util.JSONTokener.nextValue(JSONTokener.java:322)
	at atg.taglib.json.util.JSONArray.<init>(JSONArray.java:124)
	at atg.taglib.json.util.JSONTokener.nextValue(JSONTokener.java:322)
	at atg.taglib.json.util.JSONArray.<init>(JSONArray.java:124)
	at atg.taglib.json.util.JSONTokener.nextValue(JSONTokener.java:322)
	at atg.taglib.json.util.JSONArray.<init>(JSONArray.java:124)
	at atg.taglib.json.util.JSONTokener.nextValue(JSONTokener.java:322)
	at atg.taglib.json.util.JSONArray.<init>(JSONArray.java:124)
	at atg.taglib.json.util.JSONTokener.nextValue(JSONTokener.java:322)
	at atg.taglib.json.util.JSONArray.<init>(JSONArray.java:124)
	at atg.taglib.json.util.JSONTokener.nextValue(JSONTokener.java:322)

后面还有两千行 
at atg.taglib.json.util.JSONArray.<init>(JSONArray.java:124)
	at atg.taglib.json.util.JSONTokener.nextValue(JSONTokener.java:322)


PermissionInterceptor 

public class PermissionInterceptor implements Interceptor {

	public void intercept(ActionInvocation ai) {
		if (Const.OPENPERMISSION) {
			// 没权限就忽略本次请求
			String code = ai.getController().getPara("code");
			if (!MyEncrypt.decode(code)) {
				System.out.println("your sister!" + code);
				ai.getController().renderJson("result",
						Tools.makeRenderTxt(" your sister! "));
				return;
			} else {
				if (Const.CodeMap.containsKey(code)) {
					ai.getController().renderJson("result",
							Tools.makeRenderTxt(" ce! "));
					return;
				} else {
					Const.CodeMap.put(code, new Date());
					ai.invoke();
				}
			}
		} else {
			ai.invoke(); // ==>上面42行报错就是这里 at com.qqtool8.controller.PermissionInterceptor.intercept(PermissionInterceptor.java:42)
		}
	}
}




这个项目运行了2快两年了 就今天这个问题导致程序内存溢出崩溃好几次了

还没有找到问题在哪里 最近也没有啥大的改动

看起来是哪里死循环了? Jfinal版本是1.5


加载中
0
本人纯属虚构
本人纯属虚构
答案在这里 http://www.oschina.net/question/170972_223839
0
本人纯属虚构
本人纯属虚构
貌似是递归引起的 我上传了新的文件 先观察一段时间
0
JFinal
JFinal

被转换为 json 的对象出现了循环依赖,调试一下,看是什么对象引起的:

at atg.taglib.json.util.JSONTokener.nextValue(JSONTokener.java:322) at atg.taglib.json.util.JSONArray.(JSONArray.java:124)

例子:

a.attr = b;

b.attr = c;

c.attr = a;

如果没有做处理的话,转换 a 对象为 json 时会出现无限循环,jfinal 提供的 JsonKit 中的 deepth 参数就是预防这个的


本人纯属虚构
本人纯属虚构
回复 @本人纯属虚构 : 找到问题了 不规则的json导致Java heap space
本人纯属虚构
本人纯属虚构
蒽 正在测试观察 谢谢
返回顶部
顶部