Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java URLFetchServiceFactory.getURLFetchService().fetch处的StackOverflower错误_Java_Google App Engine - Fatal编程技术网

Java URLFetchServiceFactory.getURLFetchService().fetch处的StackOverflower错误

Java URLFetchServiceFactory.getURLFetchService().fetch处的StackOverflower错误,java,google-app-engine,Java,Google App Engine,我的应用程序使用GAE提供的API: URLFetchServiceFactory.getURLFetchService().fetch 它在devserver上运行,但在30到60分钟(时间不同)后,它开始抛出StackOverflowerError 调用标准web URL的fetch实际上会以何种方式导致URLFetchServiceFactory.getURLFetchService().fetch抛出错误 这是完整日志:(long)完整日志中的堆栈深度有一个非常可疑的值1025=102

我的应用程序使用GAE提供的API:

URLFetchServiceFactory.getURLFetchService().fetch
它在
devserver
上运行,但在30到60分钟(时间不同)后,它开始抛出
StackOverflowerError

调用标准web URL的
fetch
实际上会以何种方式导致
URLFetchServiceFactory.getURLFetchService().fetch
抛出错误


这是完整日志:(long)

完整日志中的堆栈深度有一个非常可疑的值1025=1024+1

仔细观察就会发现您有这样一个重复的递归调用序列:

[INFO]  at java.io.File.isDirectory(File.java:844)
[INFO]  at sun.net.www.ParseUtil.fileToEncodedURL(ParseUtil.java:269)
[INFO]  at sun.security.provider.PolicyFile.canonicalizeCodebase(PolicyFile.java:1735)
[INFO]  at sun.security.provider.PolicyFile.access$700(PolicyFile.java:258)
[INFO]  at sun.security.provider.PolicyFile$5.run(PolicyFile.java:1188)
[INFO]  at sun.security.provider.PolicyFile$5.run(PolicyFile.java:1186)
[INFO]  at java.security.AccessController.doPrivileged(Native Method)
[INFO]  at sun.security.provider.PolicyFile.getPermissions(PolicyFile.java:1185)
[INFO]  at sun.security.provider.PolicyFile.getPermissions(PolicyFile.java:1132)
[INFO]  at sun.security.provider.PolicyFile.implies(PolicyFile.java:1086)
[INFO]  at com.google.appengine.tools.development.IsolatedAppClassLoader$ProxyPolicy$2.run(IsolatedAppClassLoader.java:418)
[INFO]  at com.google.appengine.tools.development.IsolatedAppClassLoader$ProxyPolicy$2.run(IsolatedAppClassLoader.java:415)
[INFO]  at java.security.AccessController.doPrivileged(Native Method)
[INFO]  at com.google.appengine.tools.development.IsolatedAppClassLoader$ProxyPolicy._implies(IsolatedAppClassLoader.java:415)
[INFO]  at com.google.appengine.tools.development.IsolatedAppClassLoader$ProxyPolicy.implies(IsolatedAppClassLoader.java:42005)
[INFO]  at java.security.ProtectionDomain.implies(ProtectionDomain.java:285)
[INFO]  at java.security.AccessControlContext.checkPermission(AccessControlContext.java:450)
[INFO]  at java.security.AccessController.checkPermission(AccessController.java:884)
[INFO]  at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
[INFO]  at com.google.appengine.tools.development.DevAppServerFactory$CustomSecurityManager.checkPermission(DevAppServerFactory.java:429)
[INFO]  at java.lang.SecurityManager.checkRead(SecurityManager.java:888)
[INFO]  at java.io.File.isDirectory(File.java:844)
... repeating 49 times or so
我不是Java用户,但如果我正确地解释它,您可能正在处理一个目录结构太深


如果是这样,请重新安排目录结构或修改代码,以限制其一次插入的深度。

经过几个小时的挖掘,我发现了StackOverflower错误的罪魁祸首,显然是调用fetch之前的for循环导致了这一点,如下所示:

List<String> cachedLinks = (List<String>) memcache.get(url);
    for(String link : cachedLinks) { // size range from 0 to 1000 or more...
        // Do something
    }
// then a bit later
URLFetchServiceFactory.getURLFetchService().fetch(...);
List cachedLinks=(List)memcache.get(url);
对于(字符串链接:cachedLinks){//大小范围从0到1000或更多。。。
//做点什么
}
//然后过一会儿
URLFetchServiceFactory.getURLFetchService().fetch(…);
然而,
cachedLinks
包含数千个字符串值。删除for循环停止抛出
堆栈溢出错误

也许Java大师可以更好地解释这种现象,以及为什么在调用
fetch
call之前会出现for循环