Odd Jersey Error: java.lang.StackOverflowError

Odd Jersey Error: java.lang.StackOverflowError

我们已经多次看到这个,它似乎与我们的代码无关,因为我们代码的 none 在堆栈跟踪中。我们正在使用 Jersey 1.17,偶尔会出现此错误:

java.lang.WhosebugError at java.lang.String.toLowerCase(String.java:2496) at com.sun.jersey.core.util.StringIgnoreCaseKeyComparator.hash(StringIgnoreCaseKeyComparator.java:53) at com.sun.jersey.core.util.StringIgnoreCaseKeyComparator.hash(StringIgnoreCaseKeyComparator.java:48) at com.sun.jersey.core.util.KeyComparatorHashMap.keyComparatorHash(KeyComparatorHashMap.java:294) at com.sun.jersey.core.util.KeyComparatorHashMap.containsKey(KeyComparatorHashMap.java:359) at com.sun.jersey.api.client.filter.HTTPBasicAuthFilter.handle(HTTPBasicAuthFilter.java:101) at com.sun.jersey.api.client.filter.HTTPBasicAuthFilter.handle(HTTPBasicAuthFilter.java:104) at com.sun.jersey.api.client.filter.HTTPBasicAuthFilter.handle(HTTPBasicAuthFilter.java:104) at ...

然后最后一行永远重复(好吧,直到计算器溢出)。我们在 1.18 中看到更多,所以我们降级到 1.17,但现在我只是在那里看到它。

这些 web 服务在 99.9% 的时间内都可以正常工作。这会给 jvm 带来麻烦。还有其他人看到这个吗?我究竟做错了什么?我们只有一个正常的 1.17 安装,整个应用程序都是围绕它构建的。

更新:由于有人建议在应用程序服务器中循环,我们正在使用 Tomcat 6 和基本身份验证。

所以我的一个朋友发现了这个,我不敢相信自己的愚蠢。

this.theBasicAuthClient.addFilter(new HTTPBasicAuthFilter(logon, password));

我在每次调用时都添加了这个。所以我们在 class 的构造函数中创建客户端并重用它。顺便说一句,我认为这只是在请求的 header 中添加了基本的身份验证凭据,但它实际上添加了另一个过滤器。所以每次我们执行这个客户端调用时,我们都会添加另一个过滤器! GAA!

只需在创建客户端时添加它并继续...