私は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
のメソッドがこの時点でまだ返されるため、例外はさらにNullPointerException
inによって引き起こされます。ServerEndpointExporter
getServletContext
applicationContext
null
Spring をよりよく理解している人が助けてくれますか? ありがとう!