Spring WebSockets configuration XML ne fournissant pas de brokerMessagingTemplate

j'essaye d'ajouter dans le support de WebSockets en utilisant STOMP à une application MVC qui est configurée en utilisant XML. Jusqu'à présent, ça s'est très bien passé, et j'ai réussi à obtenir l'écoute d'un serveur WebSockets, et à piétiner.js peut s'y connecter, envoyer des messages et recevoir des réponses.

ce que je n'ai pas encore réussi à faire fonctionner est le support pour que le serveur envoie des messages arbitraires au client qui ne sont pas des réponses à une réponse reçue du client. Que signifie cette est en fait juste une version plus compliquée du repos jusqu'à présent, ce qui n'est pas trop utile.

ma configuration XML ressemble à ceci:

<?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 est une classe qui a une seule méthode pour retourner le temps de serveur, fonctionne très bien à la fois comme un REST et un handler WS)

et au démarrage je reçois:

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'brokerMessagingTemplate' is defined

ce qui est frustrant, C'est que IntelliJ a rempli la référence "brokerMessagingTemplate" pour moi, et je peux cliquer dessus pour une définition de @Bean dans AbstractMessageBrokerConfiguration.

je suppose que je manque un peu de config dans le XML pour faire ce travail, mais je ne peux pas trouver dans les docs ce que ce serait.

des suggestions?

2
demandé sur Graham 2016-05-18 11:46:26

1 réponses

support pour le serveur pour envoyer des messages arbitraires au client qui il n'y a pas de réponse à une réponse reçue du client.

une façon d'envoyer des messages aux clients est qu'ils s'abonnent d'abord à un sujet - assurez-vous de comprendre la différence entre" application destination prefixes "et"broker prefixes". Dans ce cas particulier, vous voulez que les clients s'abonnent à une destination courtier et puis votre serveur peut envoyer des messages à tous ces clients, à tout moment.

La meilleure façon de comprendre cela est de vérifier le flux de messages dans la documentation de référence .

pour envoyer ces messages, votre code d'application a besoin d'un modèle de messagerie.

vous pouvez corriger votre exemple de code en remplaçant le nom du haricot de la forme par le type de haricot réel SimpMessagingTemplate .

  <bean class="uk.co.grahamcox.webapp.DebugController">
    <constructor-arg name="clock" ref="clock" />
    <constructor-arg name="template" class="org.springframework.messaging.simp.SimpMessagingTemplate" />
  </bean>

Le la documentation de référence mentionne que le nom bean mais il semble qu'il n'est pas enregistré avec ce nom lors de l'utilisation de la configuration XML. N'hésitez pas à créer un Jira issue pour améliorer cela.

1
répondu Brian Clozel 2016-05-18 14:06:40