2015-05-12 67 views
2

我们已经看到了这个多次,它似乎并没有与我们的代码相关,因为我们的代码都没有在堆栈跟踪中。我们正在使用泽西1.17,我们得到了,偶尔,这个错误:奇怪的泽西岛错误:java.lang.StackOverflowError

java.lang.StackOverflowError 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,但现在我刚刚在那里看到了它。

这些webservices工作99.9%的时间。这导致了jvm的麻烦。其他人看过这个?我究竟做错了什么?我们只安装了普通的1.17版本,整个应用都是围绕它建立的。

更新:由于有人在应用程序服务器中提出了一个循环,我们使用的是Tomcat 6和基本身份验证。

+1

“HTTPBasicAuthFilter.java:104'上的代码是什么? – fge

+0

你正尝试用一种循环来授权。有时Auth会对它们进行循环过滤,如果出现错误,您需要停止它们。 1.通过客户端调用身份验证,2.在应用程序中进行身份验证呼叫3.服务需要身份验证,4.身份验证呼叫....这可以很容易地形成循环 – jeorfevre

+0

我们不会在我知道的应用程序中进行身份验证(我们使用tomcat和它的基本身份验证)。另外,如果你注意到上面的巨大堆栈轨迹的其余部分是在104行。所以第一个是101,其余的在104。 – markthegrea

回答

1

因此,我的一个朋友发现了这一点,我不能相信我自己的愚蠢。

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

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

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