问题描述
您好,我需要将 Spring Boot 应用程序部署到 Wildfly 8.1 中,但出现以下异常:
Hi I need to deploy my Spring Boot app into Wildfly 8.1 and I'm getting the following exception:
Caused by: java.lang.RuntimeException: java.lang.ClassCastException: org.apache.tomcat.websocket.server.WsServerContainer cannot be cast to io.undertow.websockets.jsr.ServerWebSocketContainer在 io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:219)在 org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:87)在 org.wildfly.extension.undertow.deployment.UndertowDeploymentService.start(UndertowDeploymentService.java:72)在 org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1948) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]在 org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1881) [jboss-msc-1.2.2.Final.jar:1.2.2.Final]... 3个引起:java.lang.ClassCastException: org.apache.tomcat.websocket.server.WsServerContainer 不能转换为 io.undertow.websockets.jsr.ServerWebSocketContainer在 io.undertow.websockets.jsr.Bootstrap$WebSocketListener.contextInitialized(Bootstrap.java:69)在 io.undertow.servlet.core.ApplicationListeners.contextInitialized(ApplicationListeners.java:173)在 io.undertow.servlet.core.DeploymentManagerImpl.deploy(DeploymentManagerImpl.java:190)... 7个
看来我对 websockets 和消息传递的设置可能是罪魁祸首?我在看这个 https://github.com/joshlong/boot-examples/issues/2 并且所有提议的解决方案似乎都不适合我.这是我的 pom 中的依赖项:
It seems that my setup for websockets and messaging might be the culprit?I was looking at this https://github.com/joshlong/boot-examples/issues/2 And none of the proposed solutions seem to work for me. Here are the dependencies from my pom:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.1.6.RELEASE</version>
</parent>
<dependencies>
<!--Testing-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${apache.httpcomponents.version}</version>
</dependency>
<!-- Spring -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-messaging</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring4</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!--Database-->
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.1-901.jdbc4</version>
</dependency>
</dependencies>
我也尝试使用直接的 spring-boot-starter-websocket 但得到了同样的结果.这也是我的 websocket 配置:
I tried using the direct spring-boot-starter-websocket as well but get the same thing.Here is my websocket config too:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer{
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
super.configureMessageBroker(registry);
registry.enableSimpleBroker("/ssp");
registry.setApplicationDestinationPrefixes("/inc");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/update/applications");
}
}
感谢您花时间阅读本文.任何帮助都会让我最感激.此外,这是我的第一个启动应用程序.:/
Thanks for taking the time to read this. Any help would me most appreciated.Also, this is my first boot application. :/
推荐答案
需要排除tomcat-embed-websocket
You need exclude tomcat-embed-websocket
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-websocket</artifactId>
</exclusion>
</exclusions>
</dependency>
这篇关于Wildfly 中的 Spring Boot Websockets的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!