奇数Jersey错误:java.lang.StackOverflower错误
我们已经多次看到这一点,它似乎与我们的代码无关,因为我们的代码都不在stacktrace中。我们正在使用Jersey 1.17,偶尔会出现以下错误: java.lang.StackOverflowerr位于 java.lang.String.toLowerCase(String.java:2496)位于 com.sun.jersey.core.util.StringIgnoreCaseKeyComparator.hash(StringIgnoreCaseKeyComparator.java:53)位于 com.sun.jersey.core.util.StringIgnoreCaseKeyComparator.hash(StringIgnoreCaseKeyComparator.java:48)位于 com.sun.jersey.core.util.KeyComparatorHashMap.keyComparatorHash(KeyComparatorHashMap.java:294)位于 com.sun.jersey.core.util.KeyComparatorHashMap.containsKey(KeyComparatorHashMap.java:359)位于 com.sun.jersey.api.client.filter.HTTPBasicAuthFilter.handle(HTTPBasicAuthFilter.java:101)位于 com.sun.jersey.api.client.filter.HTTPBasicAuthFilter.handle(HTTPBasicAuthFilter.java:104)位于 com.sun.jersey.api.client.filter.HTTPBasicAuthFilter.handle(HTTPBasicAuthFilter.java:104)位于 然后最后一行永远重复(直到堆栈溢出)。我们在1.18中看到了更多,所以我们降级到1.17,但现在我在那里看到了 这些Web服务99.9%的时间都在工作。这会在jvm中造成问题。还有人看到这个吗?我做错了什么?我们只是有一个正常的1.17安装和整个应用程序是围绕它建立奇数Jersey错误:java.lang.StackOverflower错误,java,tomcat,jersey,Java,Tomcat,Jersey,我们已经多次看到这一点,它似乎与我们的代码无关,因为我们的代码都不在stacktrace中。我们正在使用Jersey 1.17,偶尔会出现以下错误: java.lang.StackOverflowerr位于 java.lang.String.toLowerCase(String.java:2496)位于 com.sun.jersey.core.util.StringIgnoreCaseKeyComparator.hash(StringIgnoreCaseKeyComparator.java:53
更新:由于有人建议在应用程序服务器中使用循环,我们正在使用Tomcat 6和basic auth。所以我的一个朋友发现了这一点,我不敢相信我自己的愚蠢
this.theBasicAuthClient.addFilter(new HTTPBasicAuthFilter(logon, password));
我在每次调用中都添加了这个。因此,我们在类的构造函数中创建客户机并重用它。顺便提一下,我认为这只是在请求的头中添加了基本的身份验证凭据,但它实际上添加了另一个过滤器。所以每次我们执行这个客户端调用时,我们都添加了另一个过滤器!嘎
只要在创建客户端时添加它,然后继续…然后在
HTTPBasicAuthFilter.java:104
?您正在尝试使用一种循环进行身份验证。有时身份验证过滤器会在其上循环,如果出现错误,您需要停止它们。1.客户端正在调用auth,2。在应用程序3中验证调用。服务需要认证,4。身份验证呼叫。。。。这很容易造成一个循环,而我所知道的应用程序中没有进行身份验证(我们使用tomcat,它进行基本身份验证)。另外,如果您注意到上面的内容,那么巨大堆栈跟踪的其余部分位于第104行。第一个是101,其余的是104。