Я пытаюсь настроить конечную точку веб-сокета STOMP, как описано в документации , но когда я использую определение xml, я получаю исключение
org.springframework.context.ApplicationContextException: Failed to start bean 'subProtocolWebSocketHandler'; nested exception is java.lang.IllegalArgumentException: No handlers
Если я настрою это с помощью аннотаций, все будет работать как положено. Вот код:
Версия аннотации
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketBrokerConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").setAllowedOrigins("http://localhost:8888").withSockJS();
}
}
XML
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:websocket="http://www.springframework.org/schema/websocket"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/websocket
https://www.springframework.org/schema/websocket/spring-websocket.xsd">
<websocket:message-broker application-destination-prefix="/app">
<websocket:stomp-endpoint path="/ws" allowed-origins="http://localhost:8888">
<websocket:sockjs/>
</websocket:stomp-endpoint>
<websocket:simple-broker prefix="/topic"/>
</websocket:message-broker>
</beans>
Через отладку я видел что enableSimpleBroker () из класса MessageBrokerRegistry вызывается с пустым массивом String, а addEndpoint () из WebMvcStompEndpointRegistry никогда не вызывается при использовании версии XML, поэтому я полагаю, что существует некоторая проблема с загрузкой XML, возможно?
Что я могу делать не так? Все будет полезно, спасибо.