У нас есть клиент Webstart, который общается с сервером, отправляя сериализованные объекты по HTTPS, используя java.net.HttpsURLConnection
.
Все работает отлично на моем локальном компьютере и на тестовых серверах, расположенных в нашем офисе, но я испытываю очень, очень странную проблему, которая возникает только на наших производственных и промежуточных серверах (и при этом спорадически). Основное различие, которое я знаю между этими серверами и серверами в нашем офисе, заключается в том, что они расположены в другом месте, и связь клиент-сервер с ними значительно медленнее, но и до этого в продакшене долгое время работала нормально.
В любом случае, вот что происходит:
Content-Type
в HttpURLConnection
, вызывает getOutputStream ()
, чтобы получить поток для записи. java.net.ConnectException: Connection timed out: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(Unknown Source) at java.net.PlainSocketImpl.connectToAddress(Unknown Source) at java.net.PlainSocketImpl.connect(Unknown Source) at java.net.SocksSocketImpl.connect(Unknown Source) at java.net.Socket.connect(Unknown Source) at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect(Unknown Source) at com.sun.net.ssl.internal.ssl.BaseSSLSocketImpl.connect(Unknown Source) at sun.net.NetworkClient.doConnect(Unknown Source) at sun.net.www.http.HttpClient.openServer(Unknown Source) at sun.net.www.http.HttpClient.openServer(Unknown Source) at sun.net.www.protocol.https.HttpsClient.(Unknown Source) at sun.net.www.protocol.https.HttpsClient.New(Unknown Source) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source) at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source) at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(Unknown Source)
Обратите внимание, что это не исключение SocketTimeoutException
, которое используется методом connect ()
HttpURLConnection
сообщает, что он выдает ошибку, если время ожидания истекает до того, как соединение может быть установлено. Кроме того, когда это происходит, я могу вызвать conn.getResponseCode ()
и получаю код ответа 200.
EOFException
выдается в Конструктор ObjectInputStream
, который пытается прочитать заголовок сериализации, но терпит неудачу, потому что клиент никогда не получает OutputStream
для записи. Если это помогает, Кроме того, другие приложения, работающие в той же сети, не сообщали о подобных проблемах.
Кто-нибудь знает, в чем может быть причина этого, и даже что мне следует расследовать?