Есть веб сервис написанный с использованием фреймворка
Jersey версии '
1.18'. Для тестирования ресурсов использую
Jersey Test Framework. Для JAX-RS ресурсов тесты написал - всё работает. Доволен.
Но есть и вебсокеты, для которых тоже нужно написать тесты. Проблема заключается в том, что при тестировании через Jersey Test Framework не подхватывается эндпоинт вебсокета и при обращении к нему я получаю 404. В обычной же ситуации, когда собираю war файл и после деплою его к примеру на tomcat - всё работает как нужно.
Сокет отмечен аннотацией
@javax.websocket.server.ServerEndpoint. Также был реализован интерфейс
javax.websocket.server.ServerApplicationConfig, с помощью которого сообщаю которые энпоинты имеются:
public class EndpointsConfig implements ServerApplicationConfig {
@Override
public Set<Class<?>> getAnnotatedEndpointClasses(Set<Class<?>> scanned) {
Set<Class<?>> cfgs = new HashSet<Class<?>>();
cfgs.add(MyEndpoint.class);
// ...
return cfgs;
}
// ...
}
Сам тест:
public class WebSocketTest extends JerseyTest {
public WebSocketTest() throws TestContainerException, IOException {
super(new WebAppDescriptor.Builder("my.service.endpoints")
.contextListenerClass(GuiceConfig.class)
.addFilter(GuiceFilter.class, "guiceFilter", new TreeMap<String, String>() {{
put("com.sun.jersey.config.property.resourceConfigClass", "my.service.endpoints.UriExtensionsConfig");
}}
)
.build());
}
@Override
protected TestContainerFactory getTestContainerFactory() throws TestContainerException {
return new GrizzlyWebTestContainerFactory();
}
@Test
public void test() {
// обращение к вебсокету
}
}
Как сообщить Jersey Test Framework-у что есть конкретный вебсокет эндпоинт? Подозреваю, что нужно что-то указать в экземпляре WebAppDescriptor (передаю в качестве аргумента в конструктор суперкласса класса WebSocketTest ), но что?