Я использую файл jar, реализующий настраиваемые функции, который использует jersey в качестве клиента REST (версия 2.22.1). Хотя для нескольких вызовов все работает нормально, для конкретного HTTP-вызова я получаю сообщение «Ошибка: запись на сервер», но только при работе в ubuntu.
Ошибка возникает при запуске модульного теста на двух моих ПК для разработки Ubuntu. Мои ПК для разработки - это Ubuntu 16.04 с Oracle JDK:
~$ java -version
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)
$ java -version
java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.66-b17, mixed mode)
Выполнение того же теста на машине с Windows не дает мне никаких ошибок. На моей машине с Windows:
java -version
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
Полная трассировка стека ошибки:
javax.ws.rs.ProcessingException: java.io.IOException: ошибка записи на сервер org.glassfish.jersey.client.internal.HttpUrlConnector.apply (HttpUrlConnector.java:287) в org.glassfish.jersey.client.ClientRuntime. invoke (ClientRuntime.java:255) в org.glassfish.jersey.client.JerseyInvocation $ 1.call (JerseyInvocation.java:684) в org.glassfish.jersey.client.JerseyInvocation $ 1.call (JerseyInvocation.java:681) в org.glassfish.jersey.client.JerseyInvocation $ 1.call (JerseyInvocation.java:681) .glassfish.jersey.internal.Errors.process (Errors.java:315) в org.glassfish.jersey.internal.Errors.process (Errors.java:297) в org.glassfish.jersey.internal.Errors.process (Ошибки .java: 228) на org.glassfish.jersey.process.internal.RequestScope.runInScope (RequestScope.java:444) на org.glassfish.jersey.client.JerseyInvocation.invoke (JerseyInvocation.java:681) на org.glassfish. jersey.client.JerseyInvocation $ Builder.method (JerseyInvocation.java:437) в org.glassfish.jersey.client.JerseyInvocation $ Builder.put (JerseyInvocat ion.java:326)
....
Вызвано: java.io.IOException: ошибка записи на сервер на sun.net.www.protocol.http.HttpURLConnection.writeRequests (HttpURLConnection.java:666) на sun.net.www.protocol.http.HttpURLConnection.writeRequests (HttpURLConnection.writeRequests (HttpURLConnection. .java: 678) на sun.net.www.protocol.http.HttpURLConnection.getInputStream0 (HttpURLConnection.java:1534) на sun.net.www.protocol.http.HttpURLConnection.getInputStream (HttpURLConnection.java:1441) на java .1441) net.HttpURLConnection.getResponseCode (HttpURLConnection.java:480) по адресу org.glassfish.jersey.client.internal.HttpUrlConnector._apply (HttpUrlConnector.java:394) по адресу org.glassfish.jerternalConnector.http: //www.connector.java:394 java: 285)
... еще 40
Я могу предположить только две причины ошибки:
- разница версии jvm
- разные сетевые настройки в двух операционных системах
Эта ошибка возникает в определенных запросах с очень большой загрузкой http. Многие коллеги в различных сообщениях предположили, что это происходит во время больших HTTP-запросов, однако я не нашел ни одного сообщения, предлагающего решение или относящегося конкретно к Ubuntu.
Есть подсказки?
Какие сетевые параметры влияют на такую функциональность? Как я мог их изменить / адаптировать?
Потребуется ли конкретная конфигурация jvm?