2015-05-12 98 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!

只需在創建客戶端時添加它並繼續...