Я пытаюсь настроить ресурсы с поддержкой веб-рассылки, используя Dropwizard и Atmosphere. Я основаны мои настройки на код здесь: https://cvwjensen.wordpress.com/2014/08/02/websockets-in-dropwizard/Принять: приложение/json терпит неудачу с использованием атмосферы с помощью трикотажа с Dropwizard
Я использую следующий код для установки Атмосфера в Dropwizard:
AtmosphereServlet atmosphere = new AtmosphereServlet();
atmosphere.framework().addInitParameter(ApplicationConfig.ANNOTATION_PACKAGE, "my.classes");
atmosphere.framework().addInitParameter(ApplicationConfig.WEBSOCKET_SUPPORT, "true");
atmosphere.framework().addInitParameter(ApplicationConfig.PROPERTY_NATIVE_COMETSUPPORT, "true");
atmosphere.framework().addInitParameter(ApplicationConfig.PROPERTY_COMET_SUPPORT, "org.atmosphere.container.Jetty9AsyncSupportWithWebSocket");
ServletRegistration.Dynamic servlet = environment.servlets().addServlet("atmosphere", atmosphere);
servlet.addMapping("/APIWS/*");
И ресурс я использую, чтобы проверить это выглядит следующим образом:
@GET
@Produces({"application/xml", "application/json"})
public SuspendResponse<JAXBElement<CustomerListType>> getUpdates(@Context BroadcasterFactory bf) {
Broadcaster bc = getBroadcaster(bf, hash);
registerBroadcaster(hash, query, apiContext.getUser());
return new SuspendResponse.SuspendResponseBuilder<JAXBElement<CustomerListType>>()
.broadcaster(bc)
.build();
}
В основном это работает, но если я задаю заголовок Accept: application/json
в моем запросе на веб-узел, он терпит неудачу, когда сервер попытается что-то нажать. Установка Accept: application/xml
работает нормально.
я проверить его с помощью следующей локон команды:
curl -i -N -H "Accept: application/json" -H "Connection: Upgrade" -H "Upgrade: websocket" -H "Sec-Websocket-Version: 13" -H "Sec-WebSocket-Key: 258E" http://localhost:8080/APIWS/customers
Как только сервер помещает некоторые данные, он не со следующими сообщениями:
* STATE: PERFORM => DONE handle 0x80048248; line 1617 (connection #0)
* Curl_done
* Empty reply from server
* Connection #0 to host localhost left intact
curl: (52) Empty reply from server
Спасибо за ответ Jeanfrancois! Вы имели в виду установку параметра 'org.atmosphere.websocket.messageContentType' init в' application/json'? Я пробовал настройки, но, к сожалению, это не имело значения. – Petter
Включите журнал в TRACE, чтобы узнать, что случилось в Джерси. Я подозреваю, что у Джерси есть проблема с заголовком, поскольку Атмосфера не использует его. – jfarcand
Спасибо! Я установил logging для TRACE во всех задействованных модулях, и оказалось, что на самом деле у одного из наших провайдеров была ошибка. Не знаю, почему исключение появилось только в журнале TRACE, но я рад, что он работает сейчас! :) Спасибо за помощь! – Petter