Ми бачили це неодноразово, і, схоже, це не пов'язано з нашим кодом, оскільки жоден наш код не знаходиться в стек-трасі. Ми використовуємо Jersey 1.17, і ми періодично отримуємо цю помилку:
java.lang.StackOverflowError at 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) у ...
І тоді останній рядок повторюється назавжди (ну, до тих пір, поки не відбудеться stackoverflow). Ми бачили це більше в 1,18 і тому ми знизили його до 1,17, але тепер я просто побачив це.
Ці веб-сервіси працюють 99,9% часу. Це спричиняє неприємності в jvm. Хтось ще бачив це? Що я роблю неправильно? У нас просто нормальна установка 1,17, і навколо неї побудовано весь додаток.
Оновлення. Оскільки хтось запропонував цикл на сервері додатків, ми використовуємо Tomcat 6 та основний auth.
Відповіді:
1 для відповіді № 1Тож мій приятель знайшов це, і я не можу повірити власному дурості.
this.theBasicAuthClient.addFilter(new HTTPBasicAuthFilter(logon, password));
Я додавав це при кожному виклику. Тож ми робимо клієнта в конструкторі нашого класу і повторно використовуємо його. Минувшись, я подумав, що це лише додало основні дані автентичності у заголовку запиту, але це дійсно додає ще один фільтр. Тому щоразу, коли ми виконували цей клієнтський дзвінок, ми додавали ще один фільтр! GAA!
Просто додайте його, коли ви створюєте клієнта і рухаєтесь далі ...