У меня странная ситуация, когда я являюсь клиентом веб-службы, выполняющей службу (оба основаны на java) и зависает навсегда. Я установил значения времени ожидания, как описано здесь: Как установить время ожидания для клиента веб-сервиса JAX-WS? и это решение работает, однако в данном конкретном случае оно все еще не истекло. У меня установлены таймауты на 10 секунд и 30 секунд на запрос.
Я подозреваю, что основная причина заключается в том, что какое-то сетевое устройство периодически блокирует пакеты после установления сеанса TCP и TLS, и я думаю, что что-то происходит в мыльном стеке, что недостаточно умно, чтобы отключить время ожидания и отключить связь. Я использую JRE 1.8.X (довольно близко к новейшей версии) с реализацией Sun по умолчанию.
Мне удалось воспроизвести проблему, создав простой сервер сокетов tcp с Java, который читает запрос, но никогда не записывает ответ обратно клиенту и просто охлаждает.
Я создал временную работу, используя сторожевой поток для прерывания потока, выполняющего запрос, но это, похоже, не завершает запрос. В конце концов, клиент потерпит неудачу, если JVM не будет завершена и перезапущена.
Кто-нибудь видел что-то похожее на это и имеет обходной путь или исправление? Возможно, какое-то скрытое системное свойство, которое я могу установить для настройки параметров конфигурации сокета нижнего уровня? К сожалению, переключиться на CXF на самом деле не вариант.