Я пытаюсь добавить поддержку WebSockets с помощью STOMP в приложение Spring MVC, настроенное с использованием XML. До сих пор все шло очень хорошо, и мне удалось заставить прослушивать сервер WebSockets, и stomp.js может подключаться к нему, отправлять сообщения и получать ответы.
Что мне еще не удалось заставить работать, так это поддержку сервера для отправки произвольных сообщений клиенту, которые не являются ответами на сообщение, полученное от клиента. Это означает, что пока это просто более сложная версия REST, которая не слишком полезна.
Моя конфигурация XML выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:websocket="http://www.springframework.org/schema/websocket"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/websocket http://www.springframework.org/schema/websocket/spring-websocket.xsd">
<websocket:message-broker>
<websocket:stomp-endpoint path="/api/websocket/stomp" allowed-origins="*">
</websocket:stomp-endpoint>
<websocket:simple-broker prefix="/topic,/queue" />
<websocket:message-converters>
<bean class="org.springframework.messaging.converter.MappingJackson2MessageConverter">
<property name="objectMapper" ref="objectMapper" />
</bean>
</websocket:message-converters>
</websocket:message-broker>
<bean class="uk.co.grahamcox.webapp.DebugController">
<constructor-arg name="clock" ref="clock" />
<constructor-arg name="template" ref="brokerMessagingTemplate" />
</bean>
</beans>
(DebugController — это класс, который имеет единственный метод для возврата времени сервера, отлично работающий как в качестве обработчика REST, так и в качестве обработчика WS)
И при запуске получаю:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'brokerMessagingTemplate' is defined
Разочаровывает то, что IntelliJ автоматически заполнил для меня ссылку «brokerMessagingTemplate», и я могу щелкнуть по ней, чтобы перейти к определению @Bean в AbstractMessageBrokerConfiguration.
Я предполагаю, что мне не хватает некоторой части конфигурации в XML, чтобы это работало, но я не могу узнать в документах, что это будет.
Какие-либо предложения?