最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

How to do plain websocket with SpringJetty - Stack Overflow

programmeradmin3浏览0评论

I'm trying to get the basic websocket working in Spring with Jetty, as covered here.

At the time of the upgrade, runtime is reporting that the provider is null.

java.lang.NullPointerException: Cannot invoke ".eclipse.jetty.ee10.websocket.server.JettyWebSocketServerContainer.upgrade(.eclipse.jetty.ee10.websocket.server.JettyWebSocketCreator, jakarta.servlet.http.HttpServletRequest, jakarta.servlet.http.HttpServletResponse)" because "container" is null
.springframework.web.socket.server.jetty.JettyRequestUpgradeStrategy.upgrade(JettyRequestUpgradeStrategy.java:117)
...

Please suggest what may be missing. There is a myriad of conflicting spring/jetty/Jakarta/ee10 content with very little examples of plain websocket in Spring.

Do I need to use Customizer to set the handler?

main:

@EnableWebMvc
@SpringBootApplication
public class MyBootApplication...


MyWebSocketConfig class: 

import .springframework.beans.factory.annotation.Autowired;
import .springframework.boot.web.embedded.jetty.JettyServletWebServerFactory;
import .springframework.context.annotation.Bean;
import .springframework.context.annotation.Configuration;
import .springframework.web.socket.config.annotation.EnableWebSocket;
import .springframework.web.socket.config.annotation.WebSocketConfigurer;
import .springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
import .springframework.web.socket.server.jetty.JettyRequestUpgradeStrategy;
import .springframework.web.socket.server.support.DefaultHandshakeHandler;

@Configuration
@EnableWebSocket
public class MyWebSocketConfig implements WebSocketConfigurer {

  @Autowired
  private MyWebSocketHandler myWebSocketHandler;

  @Override
  public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
    registry
        .addHandler(myWebSocketHandler, "/init")
        .setHandshakeHandler(handshakeHandler())
        .setAllowedOrigins("*");
  }

  @Bean
  public DefaultHandshakeHandler handshakeHandler() {

    JettyRequestUpgradeStrategy strategy = new JettyRequestUpgradeStrategy();
    strategy.addWebSocketConfigurer(configurable -> {
       configurable.setInputBufferSize(8192);
       configurable.setIdleTimeout(Duration.ofSeconds(600));
    });
        
    return new DefaultHandshakeHandler(strategy);
  }
}

gradle deps

implementation '.springframework:spring-web:6.2.1'
implementation '.springframework:spring-orm:6.2.1'
implementation '.springframework:spring-aop:6.2.1'
implementation '.springframework:spring-tx:6.2.1'
implementation '.springframework:spring-beans:6.2.1'
implementation '.springframework:spring-core:6.2.1'
implementation '.springframework:spring-jcl:6.2.1'
implementation '.springframework:spring-expression:6.2.1'
implementation '.springframework:spring-jdbc:6.2.1'
implementation '.springframework:spring-webmvc:6.2.1'
implementation '.springframework:spring-context:6.2.1'
implementation '.springframework:spring-websocket:6.2.1'

implementation '.springframework.data:spring-data-jpa:3.3.3'
implementation '.springframework.data:spring-data-commons:3.3.3'

implementation '.springframework.security:spring-security-core:6.3.6'
implementation '.springframework.security:spring-security-web:6.3.6'
implementation '.springframework.security:spring-security-config:6.3.6'

implementation '.springframework.boot:spring-boot-starter-web:3.3.7'
implementation(".springframework.boot:spring-boot-starter-jetty:3.3.7") {
  exclude group: ".springframework.boot", module: "spring-boot-starter-tomcat"
}
implementation '.springframework.boot:spring-boot-starter-data-jpa:3.3.7'
implementation '.springframework.boot:spring-boot-starter-cache:3.3.7'
implementation '.springframework.boot:spring-boot-starter-log4j2:3.3.7'
implementation '.springframework.boot:spring-boot-starter-websocket:3.3.7'

implementation '.springframework.boot:spring-boot-autoconfigure:3.3.7'
implementation '.springframework.boot:spring-boot-actuator-autoconfigure:3.3.7'

Tried a number of different dependencies, results vary from "no JSR-356 compatible provider found..." to this null provider.

发布评论

评论列表(0)

  1. 暂无评论