Java HTTP полный дуплекс - PullRequest
       13

Java HTTP полный дуплекс

5 голосов
/ 24 ноября 2011

У меня есть веб-сервис RESTful, работающий на Джерси (GlassFish 3.1.1).Это немного необычно - используется потоковая передача HTTP.Клиент и сервер имеют длительный диалог, в котором они продолжают отправлять друг другу сообщения, закодированные в виде тегов XML.Основная причина для этого заключается в том, что сервер может передать клиенту.

У меня есть тестовый клиент, который использует HttpURLConnection.Проблема в том, что клиентский OutputStream или серверный InputStream закрываются преждевременно.Когда я пытаюсь отправить немного XML с клиента, я получаю ProtocolException брошенный (не могу записать вывод после чтения ввода).

Когда я тестирую с использованием WizTools RESTClient, я могу опубликовать запрос XML, ноЭтот инструмент не позволяет поддерживать соединение живым.Но, по крайней мере, я знаю, что веб-сервис работает, по крайней мере, в этом сценарии.(Вероятно, в сценарии потоковой передачи все просто; я думаю, что HttpURLConnection подводит меня.

Есть ли способ заставить HttpURLConnection остаться в живых и дать мне возможность реально что-то отправить на OutputStream? И, кроме того, есть ли способ позволить ему продолжать запись в OutputStream даже после получения данных через InputStream?

Обновление:

Похоже, что HttpURLConnection обеспечивает обычное использование HTTP, а именно то, что клиент не может обработать ответ, пока он полностью не отправит запрос (и не закроет поток вывода). Есть ли альтернатива, которая будетразрешить запрос и ответ на временное перекрытие? Я только начал смотреть на Apache HttpClient, но пока не нашел ничего, что указывало бы на то, что это возможно, поэтому я не уверен, теряю ли я свое время.

1 Ответ

3 голосов
/ 24 ноября 2011

Вы не должны записывать больше данных после чтения из InputStream, поскольку это не соответствует природе HTTP-протокола , который равен Запрос-ответ .Подробнее об этом здесь .

...