Я пытаюсь создать соединение через веб-сокет, используя sockjs на клиенте и spring4 (с настройкой java) на сервере под GlassFish 3.1.2.2, но что бы я ни делал, всегда происходит сбой со следующей проблемой:
java.lang.IllegalArgumentException: асинхронная поддержка должна быть включена в сервлете и для всех фильтров, участвующих в обработке асинхронных запросов. Это делается в коде Java с использованием Servlet API или путем добавления « true </ async-support>» к сервлету и фильтрации объявлений в web.xml. Также вы должны использовать контейнер Servlet 3.0+
Тем не менее, он корректно работает под Tomcat без ошибок.
Есть ли способ заставить эту работу работать под GlassFish 3.1.2.2? Или я должен переписать Spring Java-конфигурацию обратно в стиле web.xml? Если да, может кто-нибудь показать мне пример?
Спасибо.
Я уже включил веб-сокет в конфигурации протокола http в менеджере GlassFish и установил
dynamic.setAsyncSupported(true);
в инициализаторе веб-приложений.
@Configuration
public class WebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(final ServletContext servletContext) throws ServletException {
final AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(IdCardReaderWebsocketApp.class);
ctx.setServletContext(servletContext);
final Dynamic dynamic = servletContext.addServlet("dispatcher", new DispatcherServlet(ctx));
dynamic.setLoadOnStartup(2);
dynamic.addMapping("/sockjs/*");
dynamic.setAsyncSupported(true);
}
}
@Configuration
@ComponentScan("com.something.websocket.idcardreader.mock")
@EnableWebMvc
@Import({ IdCardReaderWebsocketConfig.class })
public class IdCardReaderWebsocketApp extends WebMvcConfigurerAdapter {
}
@Configuration
@EnableWebSocketMessageBroker
public class IdCardReaderWebsocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(final StompEndpointRegistry registry) {
registry.addEndpoint("/idCardReaderWebsocketMockEndpoint").setAllowedOrigins("*").withSockJS();
}
@Override
public void configureMessageBroker(final MessageBrokerRegistry registry) {
registry.setApplicationDestinationPrefixes("/mockApp");
registry.enableSimpleBroker("/idcard");
}
}