Spring — Websockets — JSR-356

#spring #spring-boot #jhipster #spring-websocket

#весна #весна-загрузка #jhipster #spring-websocket

Вопрос:

Я внедрил websockets в свое приложение. Я скопировал конфигурацию и зависимости из приложения, созданного JHipster, но получаю следующие ошибки:

 java.lang.IllegalArgumentException: No 'javax.websocket.server.ServerContainer' ServletContext attribute. Are you running in a Servlet container that supports JSR-356?
 

и

 org.apache.catalina.connector.ClientAbortException: java.io.IOException: An established connection was aborted by the software in your host machine
 

Я считаю, что эти ошибки являются причиной того, что соединение с сокетами не является согласованным, и поэтому клиент не может отправлять и / или получать какие-либо сообщения.
Я искал решение, но другой пост не помог (т. е. Добавление зависимостей glassfish).

Это мои зависимости от ws:

         <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-messaging</artifactId>
        </dependency>
 

Нужно ли мне включать какие-то другие зависимости или проблема в другом месте?

Ответ №1:

Я нашел здесь решение. Я добавил эти 2 компонента:

     @Bean
    public TomcatServletWebServerFactory tomcatContainerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();;
        factory.setTomcatContextCustomizers(Collections.singletonList(tomcatContextCustomizer()));
        return factory;
    }

    @Bean
    public TomcatContextCustomizer tomcatContextCustomizer() {
        return new TomcatContextCustomizer() {
            @Override
            public void customize(Context context) {
                context.addServletContainerInitializer(new WsSci(), null);
            }
        };
    }