9

私はSpringが初めてです(そしてstackoverflowで質問しています)。

Spring Boot を介して組み込み (Tomcat) サーバーを起動し、JSR-356 WebSocket エンドポイントを登録したいと考えています。

これが主な方法です。

@ComponentScan
@EnableAutoConfiguration
public class Server {
    public static void main(String[] args) {
        SpringApplication.run(Server.class, args);
    }
}

構成は次のようになります。

@Configuration
public class EndpointConfig {

    @Bean
    public EchoEndpoint echoEndpoint() {
        return new EchoEndpoint();
    }

    @Bean
    public ServerEndpointExporter endpointExporter() {
        return new ServerEndpointExporter();
    } 
}

実装はEchoEndpoint簡単です:

@ServerEndpoint(value = "/echo", configurator = SpringConfigurator.class)
public class EchoEndpoint {

    @OnMessage
    public void handleMessage(Session session, String message) throws IOException {
        session.getBasicRemote().sendText("echo: " + message);
    }
}

2 番目の部分については、 https ://spring.io/blog/2013/05/23/spring-framework-4-0-m1-websocket-support というブログ投稿に従いました。

ただし、アプリケーションを実行すると、次のようになります。

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'endpointExporter' defined in class path resource [hello/EndpointConfig.class]: Initialization of bean failed; nested exception is java.lang.IllegalStateException: Failed to get javax.websocket.server.ServerContainer via ServletContext attribute

のメソッドがこの時点でまだ返されるため、例外はさらにNullPointerExceptioninによって引き起こされます。ServerEndpointExportergetServletContextapplicationContextnull

Spring をよりよく理解している人が助けてくれますか? ありがとう!

4

1 に答える 1