У меня есть веб-служба RESTful, работающая на Джерси (GlassFish 3.1.1). Это немного необычно - здесь используется потоковая передача по протоколу HTTP. Клиент и сервер ведут длительный диалог, в котором они продолжают отправлять друг другу сообщения, закодированные в виде тегов XML. Основная причина этого заключается в том, что сервер может отправлять запросы клиенту.
У меня есть тестовый клиент, использующий HttpURLConnection
. Проблема в том, что либо клиентский OutputStream
, либо серверный InputStream
закрывается преждевременно. Когда я пытаюсь отправить немного XML от клиента, я получаю исключение ProtocolException
(невозможно записать вывод после чтения ввода).
Когда я тестирую с помощью WizTools RESTClient, я могу отправить XML-запрос, но этот инструмент не позволяет поддерживать соединение. Но по крайней мере я знаю, что веб-сервис работает, по крайней мере, в этом сценарии. (Вероятно, в сценарии потоковой передачи это нормально; я предполагаю, что HttpURLConnection
меня подводит.
Есть ли способ сохранить работоспособность HttpURLConnection и дать мне возможность отправить что-то в OutputStream
? И, вдобавок ко всему, есть ли способ разрешить ему продолжать запись в OutputStream
даже после того, как он получил данные через InputStream
?
Обновление:
Похоже, что HttpURLConnection
обеспечивает обычное использование HTTP, а именно, что клиент не может обработать ответ, пока он полностью не отправит запрос (и не закроет выходной поток). Есть ли альтернатива, которая допускает временное перекрытие запроса и ответа? Я только начал смотреть на Apache HttpClient, но пока не нашел ничего, что указывало бы на то, что это возможно, поэтому я не уверен, что зря трачу время.