Предотвращение клиента Джерси от возникновения ошибки вне памяти при публикации больших файлов
==============================================================================================

При размещении больших файлов в качестве InputStream с использованием[Джерси](https://jersey.java.net/) клиент, кажется, что все содержимое файла буферизируется в памяти перед отправкой на сервер. Это вызывает проблему с большими файлами, поскольку JVM не хватает места в куче. Как я могу предотвратить такое поведение в клиенте Джерси? Методы ресурсов JAX-RS на стороне сервера, по-видимому, не имеют этой проблемы при отправке данных.

Например:

 вам необходимо настроить клиент Jersey для использования chunked encoding[1](https://en.wikipedia.org/wiki/Chunked_transfer_encoding "Chunked Encoding") по запросу. Это устраняет необходимость устанавливать заголовок Content-Length и будет транслироваться из предоставленного InputStream без буферизации всего содержимого в памяти.

По умолчанию Джерси использует класс HttpURLConection JDK для обработки HTTP-запросов и ответов. К сожалению, в этом есть некоторые ошибки, связанные с частичной передачей кодирования. К счастью, у Джерси есть точки расширения, позволяющие использовать различные реализации HTTP-клиентов. Одна такая реализация основана на Apache Http Client[2](https://hc.apache.org/ "Apache HttpComponents").

Существуют две реализации клиентского обработчика apache htpp, одна поддерживает версию 3.x с окончанием срока службы, другая использует более новую версию 4.x. Для нашего проекта мы использовали реализацию, основанную на более старой (3.1) версии. Библиотека доступна в Maven Central под «вкладками». подгруппа.

Затем вы должны инициализировать свой клиент Джерси, чтобы использовать новую реализацию:

Чтобы включить кодирование по частям, вам необходимо установить размер кодирования по частям в конфигурации клиента, поскольку он не включен по умолчанию:

Пока это свойство не`null`будет использоваться чанкованная кодировка. Фактически, версия 1.14 игнорирует размер кодировки, поскольку указание размера не поддерживается базовой библиотекой apache commons-httpclient.