Я полагаю, вы говорите о HTTPS-сервере com.sun.net.httpserver
.Я также предполагаю, что вы подключаете сервер к сервису с помощью вызова Endpoint.publish
, используя какого-либо поставщика услуг, который поддерживает HTTPServer.
Ключ находится в HttpExchange.sendResponseHeaders
метод:
Если параметр длины ответа больше нуля, это указывает точное количество байтов для отправки, и приложение должно отправить этот точный объем данных.Если параметр длины ответа равен нулю, то используется кодирование передачи по частям, и может быть отправлено произвольное количество данных.Приложение завершает тело ответа, закрывая OutputStream.
Таким образом, пока обработчик передает положительное значение для responseLength
, используется Content-Length.Конечно, чтобы сделать это, ему нужно будет знать, сколько данных он собирается отправить заранее, чего вполне может и не быть.Боюсь, зависит это от реализации привязки или нет.Я не верю, что это стандартизировано - действительно, я не верю, что WebServiceProvider / HTTPServer вообще стандартизирован.
Однако, даже если ваш провайдер отказывается сотрудничать, у вас есть выход: напишите Фильтр , который добавляет буферизацию и добавляет ее в HttpContext, который вы используете для публикации сервиса.Я думаю, что для этого вам нужно написать реализацию HttpExchange , которая буферизует записанные в него данные, передаст эту цепочку фильтров, чтобы обработчик записал свой ответ, а затем, когда он вернется, напишите буферизованное содержимое, установив responseLength
, когда это так.