1

我正在尝试在 Spring 4.0 Web 应用程序中实现以下 Websockets 示例:

http://spring.io/guides/gs/messaging-stomp-websocket/

我有以下配置文件:

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.enableSimpleBroker("/");
        config.setApplicationDestinationPrefixes("/");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/socket/init").withSockJS();
    }

}

这是我在客户端上使用的带有 SockJS 和 Stomp.js 的 JavaScript:

    var stompClient = null;

    var socket = new SockJS('/HR/socket/init');

    stompClient = Stomp.over(socket);

    stompClient.connect({}, function(frame) {

        console.log('Connected: ' + frame);

        stompClient.send("/HR/get/staff", {}, JSON.stringify({ 'country': 'United Kingdom', 'city': 'London' }));

        stompClient.subscribe('/HR/new/staff', function(message){

            console.log(message);

        });

    });

创建套接字连接后,我收到一个类转换异常,如下所示:

java.lang.ClassCastException: org.apache.tomcat.websocket.server.WsServerContainer cannot be cast to javax.websocket.server.ServerContainer

我在另一个 StackOverflow 问题上看到了同样的问题,不幸的是,该解决方案没有解决我的问题,因为我的 build.gradle 文件中没有包含 javax.websocket-api。我试过包括它和排除它,我得到了同样的错误。我正在使用 Tomcat 8.0.14。

注意:完全相同的代码库已经在 Tomcat 7 上使用 Java 7 进行了测试,并且可以正常工作。当我切换到 Java 8 并在 Tomcat 8 上运行它时,我得到了上面的异常。

4

0 回答 0