Java HTTP full duplex

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

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

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

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

Обновление:

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

5
задан Distortum 25 November 2011 в 16:19
поделиться